Optimalizace MySQL dotazu

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

jardal
nováček
Příspěvky: 25
Registrován: leden 09
Pohlaví: Muž
Stav:
Offline

Optimalizace MySQL dotazu

Příspěvekod jardal » 29 srp 2011 14:47

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

Reklama
Uživatelský avatar
.:M@rt!n:.
Level 2
Level 2
Příspěvky: 227
Registrován: červen 11
Pohlaví: Muž
Stav:
Offline

Re: Optimalizace MySQL dotazu

Příspěvekod .:M@rt!n:. » 30 srp 2011 12:44

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...
MB MSI Z77A-G43 / procesor Intel Core i5-3570/ grafika MSI N660Ti PE 2GD5/OC / RAM Corsair 8GB KIT DDR3 1600MHz CL8 Vengeance / SSD disk OCZ Vertex 4 Series 128GB / zdroj Corsair CX600

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Optimalizace MySQL dotazu

Příspěvekod CZechBoY » 31 srp 2011 13:53

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?
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti