Autor | Zpráva | ||
---|---|---|---|
T-fon Profil |
#1 · Zasláno: 5. 4. 2017, 07:56:25
Ahoj, prosím o radu s připojením další tabulky do tohoto dotazu:
SELECT *, @rownum := @rownum + 1 AS row_number FROM (SELECT jmeno, hodnoceni GROUP_CONCAT(kategorie.nazev) AS nazev FROM uzivatele JOIN uzivkat ON id_uzivatele=uzivatele.id JOIN kategorie ON id_kategorie=kategorie.id CROSS JOIN (select @rownum := 0) r GROUP BY uzivatelei.id) t Rád bych přidal do dotazu počet komentářů ke každému uživateli. Myslím si, že by to mohlo být nějak takto: ...JOIN (SELECT COUNT(id_uzivatele) AS kom FROM komentare GROUP BY id_uzivatele) s ON id_uzivatele=uzivatele.id... |
||
TomášK Profil |
#2 · Zasláno: 5. 4. 2017, 08:05:27
LEFT JOIN ( SELECT id_uzivatele, COUNT(id_uzivatele) AS kom FROM komentare GROUP BY id_uzivatele ) s ON id_uzivatele=uzivatele.id |
||
T-fon Profil |
Děkuji za rychlou odpověď. Výsledek je ale bohužel stále null :(.
Přidal jsem tuto část před CROSS JOIN, je to tak správně? |
||
Kajman Profil |
#4 · Zasláno: 5. 4. 2017, 10:21:03
Pokud uživatel nemá komentář a chcete nulu místo null, tak použijte např.
coalesce(s.kom,0) komentaru |
||
T-fon Profil |
#5 · Zasláno: 5. 4. 2017, 11:13:00
Já jsem to myslel tak, že ten dotaz nefunguje, u všech uživatelů je výsledek null.
Měl jsem tam chybu v tom, že ve dvou tabulkách byl stejně pojmenovaný sloupec id_uzivatele, ale to už jsem opravil (v tabulce Komentáře jsem ho přejmenoval), bohužel stále všude null... |
||
Kajman Profil |
#6 · Zasláno: 5. 4. 2017, 12:27:40
Ukažte současnou opravenou podobu zformátovaného dotazu.
Celé seskládání jednotlivých částí bych spíše volil něco jako poddotaz t left join poddotaz s cross join poddotaz r |
||
T-fon Profil |
Takto?
SELECT *, @rownum := @rownum + 1 AS row_number FROM ( SELECT jmeno, hodnoceni group_concat(kategorie.nazev) AS nazev FROM uzivatele JOIN uzivkat ON id_uzivatele=uzivatele.id JOIN kategorie ON id_kategorie=kategorie.id LEFT JOIN ( SELECT count(id_uziv) AS kom FROM komentare GROUP BY id_uziv) s ON id_uziv=uzivatele.id CROSS JOIN ( SELECT @rownum := 0) r GROUP BY uzivatele.id) t |
||
Kajman Profil |
#8 · Zasláno: 5. 4. 2017, 20:48:33
Spíše něco jako
SELECT t.*, Coalesce(s.kom, 0) AS komentaru, @rownum := @rownum + 1 AS row_number FROM (SELECT uzivatele.id, uzivatele.jmeno, uzivatele.hodnoceni, Group_concat(kategorie.nazev) AS nazev FROM uzivatele LEFT JOIN uzivkat ON uzivkat.id_uzivatele = uzivatele.id LEFT JOIN kategorie ON uzivkat.id_kategorie = kategorie.id GROUP BY uzivatele.id, uzivatele.jmeno, uzivatele.hodnoceni) t LEFT JOIN (SELECT id_uziv, Count(*) AS kom FROM komentare GROUP BY id_uziv) s ON s.id_uziv = t.id CROSS JOIN (SELECT @rownum := 0) r |
||
T-fon Profil |
#9 · Zasláno: 6. 4. 2017, 07:44:37
Funguje perfektně. Díky moc!
|
||
Časová prodleva: 6 let
|
0