Autor | Zpráva | ||
---|---|---|---|
Melvil Profil * |
#1 · Zasláno: 11. 11. 2020, 12:28:27
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 * |
#3 · Zasláno: 11. 11. 2020, 13:24:34
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 |
#4 · Zasláno: 11. 11. 2020, 13:27:52
Pravda, muselo by tam být
count(distinct f.id_user) count(distinct com.id_comment) |
||
Časová prodleva: 4 roky
|
0