Adatbázis: SQL, XML DB

mysql select probléma

Előre is bocsi, ha nagyon primitív lesz a kérdés..

Van egy sqlrészletem, ami egy változóban($a) van:


  $a = "se lect * from todo_adatok where id in (se lect id from todo_base where
nev = 'nev') and sid not in (se lect sid from todo_statusz where
statusz_nev = 'kész') and lejar > now()"

és 3 segédváltozóm ($rend1, $limit, $rend2)


 $rend1 = "lejar";
 $limit = "5";
 $rend2 = "datum";

Az lenne a feladat, hogy $a- t rendezze $rend1 szerint, limitálja $limittel
(eddig ugye

$a . " order by " $rend1 . " limit " . $limit

), és
az így kapott táblát rendezze $rend2 szerint. Na most $rend1 után nem
írhatom ugye, hogy

", $rend2"

, mert az mást adna.

Ha mondjuk mindent megváltoztatok, és $a elején select aid lesz (ami primary
key), akkor az alábbi queryre ezt kapom vissza:


se lect * from todo_adatok where aid in (se lect aid from todo_adatok where id
in (se lect id from todo_base where nev = 'nev') and sid not in (se lect
sid from todo_statusz where statusz_nev = 'kész') and lejar > now() order by
lejar limit 5);
ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT &
IN/ALL/ANY/SOME subquery'

Ha lenne valakinek ötlete arra, hogy hogyan tudnám a fenti lekérdezést
helyesen megcsinálni úgy, hogy a $a- t nem bántom, azt nagyon megköszönném
:- ).

MySQL, read-only, sok index, tomorites

Sziasztok!

Tud-e' esetleg valaki jo modszereket arra, hogy mysql-ben (konkretan 5.0.27, gya'ri, fc4-re) hogyan lehet tablakat es indexeket hatekonyan tomoriteni? A tablakat feltolte's utan tisztan read-only modon hasznalnam, viszont fontos lenne a kis me'ret e's a gyorsasa'g is. Adott tehat egy tabla, benne ~1.8 millio rekord. Ezeknek ke't indexe van:
* egy sima id (primary key + auto increment, 1 es 1.8 millio kozott), valamint
* egy geometry::point osztalyon levo r-tree, ez egy sima mezei spatial index (utolag van letrehozva, feltolte's uta'n, `create index ...`-szel)

Egy rekord az 1 int + 1 point + 14*float, igy egy tabla ~170mega lesz. Az index pedig ~130mega, ebbol ~10mega az id indexe, a maradek az a spatial index. Erre a kovetkezotket probaltam ki:
* myisamchk tabla # hogy minden rendben van-e'
* myisampack tabla # tomorit: a 170mega's *.MYD-bol csinal 136 mega'sat, de az index megszunik letezni (a MYI file 130 mega'sbol ossszeesik kb. 1k-sra)
* myisamchk -rq tabla # aszondja a myisampack, hogy csinaljam ezt, megcsinalom, es visszakerul az index, ugyanugy 130mega's erdekes, hogy amig a create index kb. 4 percig futott, ez kb. 1 perc alatt lefut
* myisamchk tabla # csak a biztonstag kedveert, aszondja hogy fasza.

Kerdes, hogy ennel van-e valami effektivebb modszer, pl a myiamchk --sort-index es/vagy --sort-records jutott eszembe, de ez nekem valahogy nagyon nem akartak mukodni (rtfm alapjan kreten hibauzenetek jonnek, amit utana kismillio myisamchk-val lehet csak visszapofozni). Foleg az index tomorites lenne jo... osszesen ui. ~900 ilyen ta'bla't kellene ta'rolni...

A.

Csatlakozás C-vel postgres-hez

Van egy C programom, ami postgres adatbázist tölt fel adatokkal, illetve egy weblapom, ami ebből olvasgat. PHP-vel tökéletesen tudok kapcsolódni a szerverhez, a C-vel viszont gondok vannak.

Az adatbázissal kapcsolatos részek:


void clearres() {
    if(res) {
        PQclear(res);
        res = NULL;
    }
}

void db_end() {
    printf("exiting...\n");
    clearres();
    PQfinish(conn);
    exit(0);
}

void checkconn() {
    PQconsumeInput(conn);
    if(PQstatus(conn) == CONNECTION_OK)
        return;

    printf("connection lost, reconnecting...\n");
    PQreset(conn);
    if(PQstatus(conn) == CONNECTION_OK)
        return;

    printf("can't connect to database\n");
    db_end();
}

void execquery(char *cmd, const char **par, int npar, ExecStatusType expected) {
    checkconn();
    clearres();
    res = PQexecParams(conn, cmd, npar, NULL, par, NULL, NULL, 0);
    if(PQresultStatus(res) == expected)
        return;
}

void write_cur() {
	char *query[255];
        /* itt még némi finomítás */
	execquery(*query,NULL,0,PGRES_COMMAND_OK);
	
}

int main( int argc, char *argv[] ) {
    // init
    conn = PQsetdbLogin("localhost","5432",NULL,NULL,"*","*","*");
    checkconn();
    //execquery("BEGIN;",NULL,0,PGRES_COMMAND_OK);
    /* némi kód itt is, a program többi részével kapcsolatos */
    //execquery("COMMIT;",NULL,0,PGRES_COMMAND_OK);
    db_end();
    return 0;
}

A query ami lefut az jó, mert kézzel beírva működik.
Valami ötletetek van? Hol lehet a baj?

Oracle-MySQL szinkron

Sziasztok
Egy Oracle motorral rendelkező adatbázist (IMI munkaügyi rendszer) szeretnék egy másik szerveren lévő mysql-el szinkronizálni. Milyen módszerekkel, eszközökkel oldható meg ez a kérdés. Lényegén csak egy 1-2 tábla szinkronizálására lenne szükség, és szeretném valahogy automatizálni. Az oracle jelenleg egy Win98-as gépen csücsül:)

MySQL optimalizálás játékszerverre

Sziasztok!

Adott egy HP Prloiant ML110-es gép szerverként, elsősorban játékszerverek futnak rajta. Nemrég kértek WoW-szervert is, ami brutális mérteű adatbázissal jár. (Alapjáraton ~100 mega, de 2 hét alatt megduplázódott, ilyen növekedés várható később is)
Ez persze elég rendesen leterheli a szervert, ami a többi szolgáltatás minőségén meglátszik, szóval nem tartható állapot. Szeretném valahogy a végletekig optimalizálni a MySQL-szervert, akár külön erre a célra futtatni egyet. Hogyan tudom megoldani, hogy ne terhelje ennyire? Gondoltam a progi processzoridejének korlátozására (hogyan?), a progi által használt sávszél korlátozására (iptables gondolom, de ahhoz sajnos nem értek), esetleg a MySQL-DB másik szerverre való átpakolására (belassíthatja jelentősen a WoW-ot, mert csak külföldi ingyenes hostolókat találtam, sajnos még nincs 2. szerver). De biztos vannak még jobb megoldások is, ha valaki tud ilyet akkor ne sajnálja;)

Köszi a segítséget!

mysql replikáció

Sziasztok!

Szeretnék két mysql szerver között egy adatbázist replikálni. A szervereket beállítottam master-nek és slave-nek, létrehoztam egy repluser felhasználót a masteren, beállítottam neki hogy a slave-ről bejelentkezhet. De: mégsem sikerül bejelentkeznie. Azt mondja, hogy 1045 access denied... Ha administrárorral próbálom a slave-ről, akkor sikerül bejelentkeznie a masterre.

mit kellene még tennem? hol csesztem el?

Minden segítséget előre is köszönök!

Search Engine

Jobb helyet nem találván ide irok.

Saját szabad szavas keresőt kell irnom, addig eljutottam, hogy a mysql full text search -e elég normális eredményeket ad, viszont most megváltozott a feladat kicsit. A felahsználóim módosíthatják a saját magukról szóló lapokat, és ezek alapján kell megjelenitenem, a kapott emberkeet. Értelemszerüen, minél inkább elől van valaki a listában annál jobb neki.

Viszont a full text search nagyon könnyen befolyásolható bizonyos kulcs szavakra, igy az iránt érdeklődnék, hogy van -e valakinek valami öttlete arra, hogy hogyan lehet kevésbé átverhető motort irni.

- addig eljutottam, hogy a minden szót csak egyszer rakok bele a full text search mezőbe.

További ötletek, google link, tanáncs bármi jöhet.

Random

Sziasztok,

Tudna valaki segiteni? SQL-ben veletlen szam generalasakor hogyan/mivel lehet azt biztositani, hogy a szamok semmikeppen se legyenek egyformak?

koszi.