de-vraag
  • Otázky
  • Značky
  • Používatelia
Oznámenia
Odmeny
Registrácia
Po registrácii budete informovaní o odpovediach a komentároch na vaše otázky.
Prihlásiť sa
Ak už máte konto, prihláste sa a skontrolujte nové oznámenia.
Za pridané otázky, odpovede a komentáre budú udelené odmeny.
Viac na
Zdroj
Upraviť
Dean Rather
Dean Rather
Question

Môžem spojiť viacero riadkov MySQL do jedného poľa?

Pomocou MySQL môžem urobiť niečo podobné:

SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;

Môj výstup:

shopping
fishing
coding

ale namiesto toho chcem len 1 riadok, 1 stĺpec:

Očakávaný výstup:

shopping, fishing, coding

Dôvodom je, že vyberám viac hodnôt z viacerých tabuliek a po všetkých spojeniach mám oveľa viac riadkov, ako by som chcel.

Hľadal'som funkciu na MySQL Doc a nevyzerá'to, že by funkcie CONCAT alebo CONCAT_WS akceptovali množiny výsledkov, takže vie tu niekto, ako to urobiť?

1135 2008-11-10T02:34:26+00:00 3
 DineshDB
DineshDB
Edited question 26 marec 2018 в 8:13
Programovanie
sql
mysql
concat
group-concat
Popular videos
#42 Excel - Pokročilé ukotvenie buniek / vzorcov - riadky a stĺpce
#42 Excel - Pokročilé ukotvenie buniek / vzorcov - riadky a stĺpce
pred 4 rokmi
Excel – Otázky a odpovede - Ako spraviť v tabuľke prieniky stĺpcov a riadkov cez pole názvov
Excel – Otázky a odpovede - Ako spraviť v tabuľke prieniky stĺpcov a riadkov cez pole názvov
pred 4 rokmi
Excel - funkcia SUM vs. funkcia SUBTOTAL - súčtové riadky?
Excel - funkcia SUM vs. funkcia SUBTOTAL - súčtové riadky?
pred 4 rokmi
Možnonsti kontingenčnej tabuľky a grafu v Exceli
Možnonsti kontingenčnej tabuľky a grafu v Exceli
pred 2 rokmi
EXCEL - Fintička 6: Vloženie/odstránenie riadkov a stĺpcov
EXCEL - Fintička 6: Vloženie/odstránenie riadkov a stĺpcov
pred 4 rokmi
Výmena riadkov a stĺpcov v tabuľke v Exceli
Výmena riadkov a stĺpcov v tabuľke v Exceli
pred 2 rokmi
EXCEL - Fintička 2: Prispôsobenie šírky stĺpcov / výšky riadkov
EXCEL - Fintička 2: Prispôsobenie šírky stĺpcov / výšky riadkov
pred 4 rokmi
Pridávanie a skrývanie riadkov a stĺpcov
Pridávanie a skrývanie riadkov a stĺpcov
pred 3 rokmi
Ukotvenie riadku a stĺpca v Exceli
Ukotvenie riadku a stĺpca v Exceli
pred 10 rokmi
Ako zalomiť riadok v bunke v Exceli
Ako zalomiť riadok v bunke v Exceli
pred 3 rokmi
Skrytie stavového riadku
Skrytie stavového riadku
pred 2 rokmi
Excel - Čo všetko sa dá v Exceli robiť s riadkami
Excel - Čo všetko sa dá v Exceli robiť s riadkami
pred rokom
Excel - Medzisúčty - Zoskupovanie údajov +/- tlačidlá na stĺpcoch
Excel - Medzisúčty - Zoskupovanie údajov +/- tlačidlá na stĺpcoch
pred rokom
Excel - Ako v Exceli zoradiť údaje podľa viacerých stĺpcov naraz
Excel - Ako v Exceli zoradiť údaje podľa viacerých stĺpcov naraz
pred 4 rokmi
Excel - Ako v Exceli urobiť tú istú vec na viacerých hárkoch naraz
Excel - Ako v Exceli urobiť tú istú vec na viacerých hárkoch naraz
pred 4 rokmi
« Predchádzajúci
Ďalšie »
This question has 1 odpoveď in English, to read them log in to your account.
Solution / Answer
 che
che
10 november 2008 в 2:48
2008-11-10T02:48:11+00:00
Viac na
Zdroj
Upraviť
#8623072

Môžete použiť GROUP_CONCAT:

SELECT person_id, GROUP_CONCAT(hobbies SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Ako uviedol Ludwig vo svojom komentári, môžete pridať operátor DISTINCT, aby ste sa vyhli duplicitám:

SELECT person_id, GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ')
FROM peoples_hobbies 
GROUP BY person_id;

Ako uviedol Jan vo svojom komentári,, hodnoty môžete pred implodovaním zoradiť aj pomocou ORDER BY:

SELECT person_id, GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ')
FROM peoples_hobbies
GROUP BY person_id;

Ako uviedol Dag vo svojom komentári, na výsledok je limit 1024 bajtov. Ak to chcete vyriešiť, spustite tento dotaz pred vaším dotazom:

SET group_concat_max_len = 2048;

Samozrejme, môžete zmeniť 2048 podľa svojich potrieb. Na výpočet a priradenie hodnoty:

SET group_concat_max_len = CAST(
    (SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ')
    FROM peoples_hobbies 
    GROUP BY person_id)
    AS UNSIGNED
);
 octano
octano
Edited answer 26 október 2018 в 4:41
1638
0
 lpfavreau
lpfavreau
10 november 2008 в 2:48
2008-11-10T02:48:54+00:00
Viac na
Zdroj
Upraviť
#8623074

Pozrite sa na GROUP_CONCAT, ak to vaša verzia MySQL (4.1) podporuje. Viac informácií nájdete v dokumentácii.

Vyzeralo by to asi takto:

  SELECT GROUP_CONCAT(hobbies SEPARATOR ', ') 
  FROM peoples_hobbies 
  WHERE person_id = 5 
  GROUP BY 'all';
Paul Mougel
Paul Mougel
Edited answer 1 september 2017 в 8:13
100
0
Dean Rather
Dean Rather
10 november 2008 в 2:48
2008-11-10T02:48:38+00:00
Viac na
Zdroj
Upraviť
#8623073

Existuje funkcia GROUP Aggregate, GROUP_CONCAT.

Warren Sergent
Warren Sergent
Edited answer 27 jún 2016 в 11:03
27
0
Pridať otázku
Kategórie
Všetky
Technológia
Kultúra / Rekreácia
Život / Umenie
Veda
Profesionálne
Obchod
Používatelia
Všetky
New
Popular
1
365
Registered pred dňom
2
True Image
Registered pred dňom
3
archana agarwal
Registered pred 3 dňami
4
Maxim Zhilyaev
Registered pred 6 dňami
5
adambotsfford adambotsfford
Registered pred týždňom
BG
DE
EL
ES
FR
ID
IT
JA
KO
NL
PT
RU
SK
TR
ZH
© de-vraag 2022
Zdroj
stackoverflow.com
na základe licencie cc by-sa 3.0 s uvedením autora