NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

Diskuze: MySQL - group

V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Jak se ti kurz líbí?
Tvé hodnocení kurzuZnaků 0 z 50-500
Aktivity
Avatar
Neaktivní uživatel: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
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel: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
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
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
Neaktivní uživatel: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
Neaktivní uživatelský účet
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.