Autor Zpráva
Melvil
Profil *
Zdravím,

rád bych se zeptal, snažím se vypsat všechny příspěvky a k nim počet komentářů + počet, kolikrát si lidi příspěvek uložili mezi oblíbené. Pokud např. řeším pouze navázání komentářů, vše funguje v pořádku, ale jakmile přidám i počet oblíbených, navzájem se mi hodnoty násobí (vzhledem k tomu že to počítá počet řádků).

Proto se chci zeptat, dá se toto nějak vyřešit jedním dotazem, upravit tedy ten níže, nebo je na to potřeba napsat separátní dotaz?

Díky moc!

select 
                    p.id,
                    p.image,
                    p.title,
                    p.perex,
                    p.date,
                    c.name category_name,
                    n.url,
                    count(f.post_id) count_favourite,
                    count(com.post_id) count_comments
                from 
                    post p 
                left join 
                    navigation n 
                        on n.id = p.nav_id
                left join
                    post_category c
                        on c.id = p.category_id
                left join 
                    post_favourite f 
                        on p.id = f.post_id
                left join 
                     post_comment com 
                         on com.post_id = p.id
                group by
                    p.id
                order by 
                    p.date desc
Kajman
Profil
S nejmenší změnou dotazu by stačilo dát
count(distinct sloupce)

Ale možná bych na ty počty použil korelovaný poddotaz v select části (hlavně, pokud bude použit limit). Něco jako

SELECT p.id,
       p.image,
       p.title,
       p.perex,
       p.date,
       c.name                      category_name,
       n.url,
       (SELECT Count(f.post_id)
        FROM   post_favourite f
        WHERE  p.id = f.post_id)   count_favourite,
       (SELECT Count(com.post_id)
        FROM   post_comment com
        WHERE  com.post_id = p.id) count_comments
FROM   post p
       LEFT JOIN navigation n
              ON n.id = p.nav_id
       LEFT JOIN post_category c
              ON c.id = p.category_id
ORDER  BY p.date DESC



Zkuste, co bude rychlejší. Navíc ten původní dotaz padne, pokud bude na serveru nastavené only_full_group_by.
Melvil
Profil *
Kajman:
Díky moc, korelovaný poddotaz funguje.

Co se týče přidání "distinct", toto řešení jsem už zkoušel a u těch záznamů, který by měli vrátit hodnoty >0, tak vrátí vždy 1, i když je tam např. 15 komentářů.
Kajman
Profil
Pravda, muselo by tam být

count(distinct f.id_user)
count(distinct com.id_comment)
nebo něco podobného, co jedinečně určuje řádky pro jeden příspěvek.

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:

0