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

Odpovědět
jardal
nováček
Příspěvky: 25
Registrován: 29 led 2009 11:27

Optimalizace MySQL dotazu

Příspěvek 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
Uživatelský avatar
.:M@rt!n:.
Level 2
Level 2
Příspěvky: 227
Registrován: 06 čer 2011 16:30

Re: Optimalizace MySQL dotazu

Příspěvek 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...
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: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: Optimalizace MySQL dotazu

Příspěvek 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?
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
Odpovědět

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