Diskuze: MySQL - group

Ostatní jazyky SQL SQL a databáze MySQL - group

Avatar
Jenkings
Redaktor
Avatar
Jenkings:

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
Redaktor
Avatar
Jenkings:

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:

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
Redaktor
Avatar
Jenkings:

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.