Stránka 1 z 1

Optimalizace MySQL dotazu

Napsal: 29 srp 2011 14:47
od jardal
Ahoj. Potřeboval bych poradit s optimalizací SQL dotazu. Mám dvě tabulky v jedné jsou články v druhé historie.
První tabulka články:
1 (id), Test (název)

v druhé mám historii:
1 (id), 1 (idclanku), 50 (udalost)
2 (id), 1 (idclanku), 100 (udalost)
3 (id), 1 (idclanku), 150 (udalost)
4 (id), 2 (idclanku), 50 (udalost)
5 (id), 2 (idclanku), 150 (udalost)

No a já potřebuju seznam přečtených a nepřečtených článků. Přečtené mám vyřešený:
SELECT clanek.nazev FROM clanek JOIN historie ON clanek.id=historie.idclanku WHERE historie.udalost=100 GROUP BY clanek.id ORDER BY clanek.id

Horší to je s nepřečtenejma, jelikož kdybych dal podmínku historie.udalost<>100, tak se mi tam dostane i článek 2, jelikož má i událost 50
Zatim to mám takhle, ale je to dost pomalý:
SELECT clanek.nazev FROM clanek
WHERE NOT EXISTS (SELECT id FROM historie WHERE clanek.id=historie.idclanku AND udalost=100))

Díky za radu,
Jarda

Re: Optimalizace MySQL dotazu

Napsal: 30 srp 2011 12:44
od .:M@rt!n:.
Každému článku bych ještě to databáze přidal jeden sloupec s boolean hodnotou - 1 nebo 0 (true false). A pak zjistit jestli byl už článek čtený (true) a z databáze pak načíst jenom ty které mají false...

Re: Optimalizace MySQL dotazu

Napsal: 31 srp 2011 13:53
od CZechBoY
podle čeho poznáš jestli si to přečetl? máš tam uživatele? IP adresy?
historii článků fakt nechápu, nemůžeš prostě udělat jednu tabulku na články a druhou na přečtený články?