Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: MySQL - group

Aktivity
Avatar
Jenkings
Tvůrce
Avatar
Jenkings:11.12.2015 10:52

Ahoj
Chtěl bych vás poprosit o radu ohledně sestavení SQL dotazu pro přehled soukromých zpráv.

Pro jednoduchost bych měl třeba tabulku se sloupci: "od","pro","text"

Potřebuji ale utvořit skupinu tak, že pravidlo pro groupování by mohlo být jedno z těchto:
v dotazech se od = od a pro= pro
v v dotazech se od=pro a pro=od

V podstatě potřebuji aby se z konverzace mezi dvěma lidmi shlukla do jednoho záznamu zobrazující poslední zprávu která mezi nimi proběhla. (a následně postupně vypsat jako seznam různých konverzací)

Odpovědět
11.12.2015 10:52
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Jenkings
Tvůrce
Avatar
Jenkings:11.12.2015 11:26

No, tak jsem nakonec pro svojí konkrétní tabulku napsal tohle řešení:

SELECT precteno,pro,text,datum,a.jmeno as od FROM messages m JOIN accounts a ON m.od = a.id WHERE (od= ? OR pro=?) GROUP BY CONCAT(GREATEST(od,pro), '-', LEAST(od,pro))

Nicméně to mi vybere tu nejstarší zprávu z celé konverzace. Teď už jen vyřešit jak po groupnutí vypsat jen ten prvek s nejvyšším ID z dané GROUP, což se mi moc nedaří

Nahoru Odpovědět
11.12.2015 11:26
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Odpovídá na Jenkings
Michal Štěpánek:11.12.2015 12:14

Nestačilo by

...GROUP BY od

?

Nahoru Odpovědět
11.12.2015 12:14
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jenkings
Tvůrce
Avatar
Jenkings:11.12.2015 12:16

nestačlo, jelikož by ti to do té konverzace negroupovalo odpovědi toho druhého.

Nakonec jsem ale ten problém vyřešil takhle:

SELECT precteno,pro,text,datum,od,a.jmeno AS od_name,a2.jmeno AS pro_name FROM messages m JOIN accounts a ON m.od = a.id JOIN accounts a2 ON m.pro = a2.id WHERE m.id IN (SELECT MAX(id) FROM messages GROUP BY CONCAT(GREATEST(od,pro), '-', LEAST(od,pro))) ORDER BY m.id DESC
Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
11.12.2015 12:16
Největší časovou náročnost má výpočet časové náročnosti..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.