Autor | Zpráva | ||
---|---|---|---|
jarks Profil |
#1 · Zasláno: 28. 7. 2009, 14:30:05
Mám tabulku UZIVATELE se sloupci id, jmeno, a tabulku EMAILY se sloupci uzivatele_id, email.
UZIVATELE: 1, Novak 2, Vopajšlík EMAILY 1, novak@prvni.cz 1, novak@druha.cz 1, novak@treti.cz 2, vopajslik@prvni.cz Jak je vidět, jeden uživatel může mít více e-mailů a ty jsou uloženy ve zvláštní tabulce a propojeny pomocí ID (je to jen ukázka, mohou to být jakákoliv jiná data). Chci dostat výsledek, který by měl vypadat nějak takto: id | jmeno | adresy --------------------------------- 1 | Novak | novak@prvni,cz, novak@druha.cz, novak@treti.cz 2 | Vopajslik | vopajslik Dalo by se to udělat bez toho, abych v cyklu procházel první tabulku a dotazoval se za každého uživatele zvlášť? Něco jako: SELECT jmeno, (SELECT něco_jako_CONCAT_ale_ze_všech_řádků FROM emaily WHERE uzivatel_id = uzivatele.id) AS adresy FROM uzivatele; Dík. |
||
Kajman_ Profil * |
select u.id, u.jmeno, group_concat(e.email) adresy from uzivatele u left join emaily e on u.id=e.uzivatel_id group by u.id, u.jmeno |
||
TomášK Profil |
#3 · Zasláno: 28. 7. 2009, 14:33:22 · Upravil/a: TomášK
Edit: viz Kajman_ (dík za opravu, přemýšlel jsem u toho špatným koncem zad)
|
||
jarks Profil |
#4 · Zasláno: 28. 7. 2009, 15:08:56
Díky moc pánové, to je rychlost!
Prozkoušel jsem to a takto mi to dává jen poslední e-mail. Ale nasměrovali jste mě správným směrem - je třeba se ptát z druhé strany, to znamená vybírat z EMAILY, aby GROUP_CONCAT, měl co zřetězovat. Takže nějak takhle: select u.id, u.jmeno, group_concat(e.email) adresy from emaily e left join uzivatele u on e.uzivatel_id=u.id group by u.id |
||
Kajman_ Profil * |
#5 · Zasláno: 28. 7. 2009, 15:58:45
Prozkoušel jsem to a takto mi to dává jen poslední e-mail.
Jste si jistý? Rozdíl mezi těmi dvěma dotazy by měl být jen v různém chování u řádků, které se nedají provázat do druhé tabulky přes id uživatele. |
||
Časová prodleva: 15 let
|
0