Autor | Zpráva | ||
---|---|---|---|
Lukáš66666 Profil * |
#1 · Zasláno: 15. 1. 2016, 16:14:15
Čau, potřeboval bych poradit se sestavením dotazu do MySQL.
Máme takový jednoduchý chat kde si můžou vždy psát 2 uživatelé mezi sebou a chtěli bychom si tam doplnit přehled otevřených konverzací, ale nevíme jak od každé konverzace vypsat vždy jenom tu poslední zprávu mezi těmi uživateli. Př.: Pavel si bude psát s uživateli Lukáš, Tomáš a Jitka takže by po přihlášení měl vidět ten seznam kde bude Lukáš (20:00): poslední zpráva této konverzace Tomáš (19:00): poslední zpráva této konverzace Jitka (13:00): poslední zpráva této konverzace Neví někdo jak na to? Struktura tabulky se zprávami je: id uid_m datum odesilatel prijemce zprava |
||
Keeehi Profil |
Diskuse JPW: Některé časteji řešené dotazy pro MySQL - FAQ » Nalezení posledních pěti článků z každé kategorie
Ale myslím, že by měl stačit i ten dotaz nad tím. |
||
Kajman Profil |
#3 · Zasláno: 15. 1. 2016, 21:17:29
Spíše to bude něco takového
Diskuse JPW: řazení záznamů uvnitř GROUP BY |
||
Lukáš66666 Profil |
#4 · Zasláno: 17. 1. 2016, 18:20:51
Tak jsem nakonec zkopíroval toto řešení a zdá se že to funguje v pohodě. Ale absolutně ten dotaz nechápu, tak snad bude fungovat bez chyb.
SELECT z.* FROM tabulkasezpravami z JOIN (SELECT max(maxid) posledni FROM (SELECT odesilatel protejsek, max(id) maxid FROM tabulkasezpravami WHERE prijemce = ".$uzivatel." GROUP BY odesilatel UNION ALL SELECT prijemce protejsek, max(id) maxid FROM tabulkasezpravami WHERE odesilatel = ".$uzivatel." GROUP BY prijemce) t GROUP BY protejsek) m ON z.id = m.posledni ORDER BY z.id DESC |
||
Časová prodleva: 5 dní
|
|||
Lukáš66666 Profil |
#5 · Zasláno: 22. 1. 2016, 23:44:28
Nedokázal by mi někdo laicky vysvětlit co vlastně to join apod dělá? Koukal jsem se na několik návodů, ale vůbec to nechapu.
|
||
Keeehi Profil |
#6 · Zasláno: 23. 1. 2016, 00:40:33
SELECT odesilatel protejsek, max(id) maxid FROM tabulkasezpravami WHERE prijemce = ".$uzivatel." GROUP BY odesilatel UNION ALL SELECT prijemce protejsek, max(id) maxid FROM tabulkasezpravami WHERE odesilatel = ".$uzivatel." GROUP BY prijemce SELECT max(maxid) posledni FROM (**předchozí výsledek**) t GROUP BY protejsek SELECT z.* FROM tabulkasezpravami z JOIN (**předchozí výsledek**) m ON z.id = m.posledni ORDER BY z.id DESC |
||
Časová prodleva: 9 let
|
0