Autor Zpráva
jarks
Profil
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
Edit: viz Kajman_ (dík za opravu, přemýšlel jsem u toho špatným koncem zad)
jarks
Profil
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 *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0