/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL GROUP_CONCAT
Fra : Morten


Dato : 31-10-07 23:10


Hej, nogen der kan give en forklaring på duplikaterne der kommer i denne
query:

http://pastie.caboo.se/112881

Umiddelbart gætter jeg at MySQL har lidt problemer med flere
GROUP_CONCAT i samme query.

Mvh.

Morten


 
 
Michael Zedeler (01-11-2007)
Kommentar
Fra : Michael Zedeler


Dato : 01-11-07 00:12

Morten wrote:
>
> Hej, nogen der kan give en forklaring på duplikaterne der kommer i denne
> query:
>
> http://pastie.caboo.se/112881
>
> Umiddelbart gætter jeg at MySQL har lidt problemer med flere
> GROUP_CONCAT i samme query.

Det tror jeg ikke. Du har lavet krydsproduktet imellem følgende to mænger:

{A, L} og {C, P}. Det giver:

(A,C)
(A,P)
(L,C)
(L,P)

Når man så bruger group_concat, gør den ikke andet end at sætte
værdierne sammen:

"AALL", "CPCP".

Det virker præcis som det skal. For at opnæ det du ønsker, kan du f.
eks. bruge subselects i stedet for:

SELECT men.id,
(SELECT GROUP_CONCAT(name SEPARATOR ' ')
FROM sodas WHERE sodas.man_id = id),
(SELECT GROUP_CONCAT(beers.name SEPARATOR ' ')
FROM sodas WHERE beers.man_id = id)
FROM men

....og så håber jeg iøvrigt at beers og sodas er eksempler og ikke noget
du vil bygge videre på, idet de ikke se forskellige nok ud til at de med
rette kan stoppes i forskellige tabeller.

Mvh. Michael.

Morten (01-11-2007)
Kommentar
Fra : Morten


Dato : 01-11-07 21:18


Hej Michael,

Tak for forklaringen, det giver god mening.

Mvh.

Morten


>> Umiddelbart gætter jeg at MySQL har lidt problemer med flere
>> GROUP_CONCAT i samme query.
>
> Det tror jeg ikke. Du har lavet krydsproduktet imellem følgende to mænger:
>
> {A, L} og {C, P}. Det giver:
>
> (A,C)
> (A,P)
> (L,C)
> (L,P)
>
> Når man så bruger group_concat, gør den ikke andet end at sætte
> værdierne sammen:
>
> "AALL", "CPCP".
>
> Det virker præcis som det skal. For at opnæ det du ønsker, kan du f.
> eks. bruge subselects i stedet for:
>
> SELECT men.id,
> (SELECT GROUP_CONCAT(name SEPARATOR ' ')
> FROM sodas WHERE sodas.man_id = id),
> (SELECT GROUP_CONCAT(beers.name SEPARATOR ' ')
> FROM sodas WHERE beers.man_id = id)
> FROM men
>
> ...og så håber jeg iøvrigt at beers og sodas er eksempler og ikke noget
> du vil bygge videre på, idet de ikke se forskellige nok ud til at de med
> rette kan stoppes i forskellige tabeller.
>
> Mvh. Michael.

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste