Autor Zpráva
T-fon
Profil
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
Mám ještě tabulku "komentáře", kde jsou sloupce id, komentář a id_uzivatele (čili ke každému uživateli může být přiřazeno několik komentářů).
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...
Což je ale špatně, takhle to nefunguje...
TomášK
Profil
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
Pokud uživatel nemá komentář a chcete nulu místo null, tak použijte např.

coalesce(s.kom,0) komentaru
T-fon
Profil
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
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
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
Funguje perfektně. Díky moc!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: