Autor | Zpráva | ||
---|---|---|---|
chromko Profil |
#1 · Zasláno: 15. 7. 2011, 10:19:07
Ako by som mohol prepísať (optimalizovať) toto query, aby bolo bez toľkých 'select'. Potrebujem zistiť koľko má daný uživateľ napr. videi, recenzi, atď .
Doteraz som to riešil subselectami, ale ako by sa to dalo prepisať elegantnejšie? Respektíve, niečo čo môže byť potencialne rýchlejšie, kedže veľa selectov asi nie je dobré riešenie.. query: SELECT profily.*, user.name, user.priezvisko, user.nickname, user.datum, (SELECT COUNT(*) FROM video WHERE video.pridal='$cl_det_je' AND video.zobrazovat='1') AS poocetvideoo, (SELECT COUNT(*) FROM prispevky WHERE prispevky.pridal='$cl_det_je' AND prispevky.zobrazovat='1') AS kolkopris, .... // atď. ďalších 10 selectov FROM profily LEFT JOIN user ON profily.p_n=user.id WHERE profily.p_n='$cl_det_je' LIMIT 1 |
||
Časová prodleva: 3 dny
|
|||
o_O Profil |
#2 · Zasláno: 18. 7. 2011, 11:17:28
Šlo by to přepsat všechno na left-joiny stylem:
SELECT u.*, count(distinct p.pid) AS pocet_prispevku, count(distinct v.vid) AS pocet_video FROM users u LEFT JOIN prispevky p ON (u.uid=p.puid) LEFT JOIN video v ON (u.uid=v.pridal) WHERE u.uid=$cl_det_je Důležité je tam to distinct. V případě výběru více uživatelů nezapomeňte přidat GROUP BY. |
||
Kajman_ Profil * |
#3 · Zasláno: 18. 7. 2011, 12:35:10
Tipuji, že optimálnější bude pro databázi první řešení. Není vždy pravda, že méně výskytů slova select zvýší rychlost.
|
||
o_O Profil |
#4 · Zasláno: 18. 7. 2011, 12:48:40
Kajman:
A to mnohonásobně. Zobrazeny záznamy 0 - 0 (1 celkem, dotaz trval 9.1272 sekund) SELECT u . * , count( DISTINCT p.pid ) AS pocet_prispevku, count( DISTINCT v.vid ) AS pocet_video FROM users u LEFT JOIN prispevky p ON ( u.uid = p.puid ) LEFT JOIN video v ON ( u.uid = v.pridal ) WHERE u.uid =1 Zobrazeny záznamy 0 - 0 (1 celkem, dotaz trval 0.0072 sekund) SELECT * , ( SELECT count( pid ) FROM prispevky WHERE puid =1 ) AS pocet_prispevku, ( SELECT count( vid ) FROM video WHERE pridal =1 ) AS pocet_video FROM users WHERE uid =1 V obou případech jsem vybíral 2600 příspěvků a 1557 videí. |
||
Časová prodleva: 14 let
|
0