Autor | Zpráva | ||
---|---|---|---|
Cooolio Profil * |
#1 · Zasláno: 20. 3. 2016, 08:41:04
Pomůžete mi prosím zjednodušit tento SQL dotaz? Nejsem si jistý těmi LEFT JOINy, zda by nešlo již připojené tabulky použit znovu
"SELECT t.id as t_id, t.subject as t_subject, t.home as t_home, t.xhome as t_xhome, t.time as t_time, t.author as t_author, t.guest as t_guest, p.id as p_id, p.xhome as p_xhome, p.author as p_author, p.guest as p_guest, p.time as p_time, r.title as r_title, up.username as up_username, up.publicname as up_publicname, ut.username as ut_username, ut.publicname as ut_publicname, (SELECT COUNT(id) FROM `" . _prefix . "posts` WHERE id<p_id AND type=5 AND xhome=p_xhome AND home=t_home) as page_result FROM `" . _prefix . "posts` t LEFT JOIN `" . _prefix . "posts` p ON (p.xhome=t.id) LEFT JOIN `" . _prefix . "users` up ON (up.id=p.author) LEFT JOIN `" . _prefix . "users` ut ON (ut.id=t.author) INNER JOIN `" . _prefix . "root` r ON (t.home=r.id AND r.level<=" . _priv_level . ") WHERE t.bumptime=p.time OR t.bumptime=t.time AND t.type=5 AND t.xhome=-1 ORDER BY t.bumptime DESC LIMIT " . (int)$limit |
||
Kajman Profil |
#2 · Zasláno: 20. 3. 2016, 10:34:37
Tabulku sice připojujete vícekrát, ale berete z ní jiné řádky. Samotný sql dotaz asi zkrátit nelze, pokud trvá dlouho, ověřte si přes explain dostupnost a použití indexů.
Zjednodušit dotazy by šlo přesunutím logiky do aplikace. Ake pak budete předělávat celý php kód. Viz např. www.notorm.com/#performance |
||
Cooolio Profil * |
#3 · Zasláno: 20. 3. 2016, 11:40:45
Děkuji
|
||
Časová prodleva: 8 let
|
0