MySQL Group Concat for Strings

Mysql Group Concat Strings



Ang pag-andar ng GROUP _CONCAT ay isang GROUP NG pinagsamang pagpapaandar na nagbibigay-daan sa iyo upang pagsamahin ang mga haligi ng haligi mula sa maraming mga hilera sa isang solong patlang. Nagbabalik ito ng isang string kung ang hanay ng pangkat ay naglalaman ng isa o walang halaga na haligi ng haligi at nagbabalik ng isang halaga ng NULL kung wala ang matatagpuan.

Tuturuan ka ng tutorial na ito kung paano gamitin ang pagpapaandar ng MySQL GROUP_CONCAT () upang pagsamahin ang mga string mula sa isang pangkat na may maraming mga pagpipilian.







Pangunahing Paggamit

Tulad ng nabanggit namin, ang pagpapaandar na ito ay nagbabalik ng isang resulta ng string na may mga halaga ng pinagsama-samang hindi halagang halaga o isang Null kung wala.



Ang pangkalahatang syntax ay:



GROUP_CONCAT ([ DISTINCT ]expr[,expr ...]
[ INIUTOS NI expr
[ ASC | DESC ] [,col_name ...]]
[SEPARATOR str_val])

Paliwanag

Mula sa nasa itaas na syntax, maaari mong makita na ang function na GROUP_CONCAT ay gumagamit ng mga sugnay at hadlang sa MySQL upang tukuyin ang iba't ibang mga pagpipilian:





  1. DISTINCT: Tumutulong ang sugnay na DISTINCT na alisin ang mga duplicate na halaga sa itinakdang pangkat bago ang proseso ng pagsasama-sama. Isaalang-alang ang aming tutorial na nagpapaliwanag ng MySQL DISTINCT upang maunawaan kung paano ito gumagana.
  2. INIUTOS NI: Ang susunod na sugnay ay ang ORDER BY na makakatulong sa pag-uri-uriin ang mga halaga sa isang tinukoy na pagkakasunud-sunod. Ang pagkakasunud-sunod ay maaaring umaakyat o bumababa. Kung walang tinukoy na order, na-format ng MySQL ang mga halaga sa pataas na pagkakasunud-sunod.
  3. SEPARATOR : Itinakda ng sugnay na ito ang string na literal na ipinasok sa pagitan ng mga halaga ng pangkat sa proseso ng pagsasama-sama. Bilang default, gumagamit ang MySQL ng isang kuwit (,) upang paghiwalayin ang mga halaga.

TANDAAN: Ang resulta ng string na nabuo ng pag-andar ng MySQL GROUP_CONCAT () ay limitado sa isang haba ng itinakdang halaga sa variable na group_concat_max_len. Ang halagang ito ay tinukoy sa system at mayroong isang default na halagang 1024. Maaari mong baguhin ang pandaigdigang halagang ito o itakda ito sa session na kailangan mo.

ITAKDA [ GLOBAL | SESYON ]group_concat_max_len= halaga ;

Isaalang-alang ang sanggunian sa ibaba upang matuto nang higit pa:



https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len

Paano Ito Gumagawa: Halimbawa

Payagan akong gumamit ng isang simpleng halimbawa upang ipaliwanag kung paano gumagana ang pagpapaandar ng GROUP_CONCAT (). Isaalang-alang ang talahanayan na may isang patlang para sa CHAR bilang:

LILIKHA TABLE mag-concat ( halaga CHAR );

Ipasok namin ang mga halaga sa talahanayan tulad ng ipinakita sa query sa ibaba:

INSERT SA mag-concat ( halaga ) VALUES ('H'),('AT'),('ANG'),('ANG'),('O');

Kung nagsasagawa kami ng isang pangunahing pagpapatakbo ng GROUP_CONCAT sa mga halagang nasa talahanayan, makakakuha kami ng isang resulta ng string tulad ng ipinakita sa ibaba:

PUMILI GROUP_CONCAT ( DISTINCT halaga INIUTOS NI halaga ASC SEPARATOR') MULA SA mag-concat ;

Ang nagresultang halaga ay:

+ ----------------------------------------------- ------------ +
| GROUP_CONCAT ( DISTINCT halaga INIUTOS NI halaga ASC SEPARATOR') |
+ ----------------------------------------------- ------------ +
|E H L O|
+ ----------------------------------------------- ------------ +
1hilera sa itakda (0.01seg)

Nais mo ba ng ibang paraan upang maunawaan kung ano ang nangyari sa resulta na ibinigay sa itaas?

Nagsisimula kami sa pamamagitan ng pag-aalis ng lahat ng mga duplicate na halaga dahil sa sugnay na MySQL DISTINCT na nag-aalis ng isang L.

Susunod, nagpapatuloy kami sa PAG-order NG umakyat na order na tinukoy sa (ASC), na binabago ang string sa anyo ng

HELO->EHLO

Sa wakas, isinasagawa namin ang proseso ng pagsasama-sama gamit ang isang puwang bilang separator para sa mga itinakdang halaga, na nagreresulta sa string E H L O mula sa {H, E, L, L O}.

Mga Halimbawa ng Paggamit ng Mga Kaso

Kumuha tayo ng isang tunay na database at gamitin ito upang ilarawan kung paano namin maipapatupad ang function na GROUP_CONCAT (). Sa halimbawang ito, gagamitin namin ang database ng Sakila, at partikular, ang talahanayan ng mga address mula sa database ng Sakila.

Isaalang-alang ang mapagkukunan sa ibaba upang i-download ang database para sa iyong mga halimbawa:

https://dev.mysql.com/doc/index-other.html

Sa talahanayan ng mga address ng Sakila database, makukuha mo ang haligi ng distrito. Maaari nating makuha ang lahat ng mga natatanging distrito na pinaghihiwalay ng isang tubo tulad ng ipinakita sa query sa ibaba:

PUMILI GROUP_CONCAT ( DISTINCT distrito INIUTOS NI SEPARATOR ng distrito'|') MULA SA sakila.address LIMIT 5;

Ang query sa itaas ay ipapakita ang lahat ng mga distrito ng DISTINCT at iuutos ang mga ito sa pataas na pagkakasunud-sunod na pinaghiwalay ng isang tubo.

TANDAAN: Ang pagpapaandar na GROUP_CONCAT () ay isang pinagsamang pagpapaandar. Samakatuwid, kinakailangan mong tukuyin ang pahayag ng ORDER BY sa loob ng pagpapaandar at hindi sa PILIPING pahayag.

Konklusyon

Ang pagpapaandar na MySQL GROUP_CONCAT () na tinalakay sa tutorial na ito ay isang kapaki-pakinabang na pagpapaandar na nagbibigay-daan sa iyo upang lumikha ng natatanging, pinagsunod-sunod, at organisadong data mula sa isang talahanayan na maaaring maglaman ng mga duplicate at hindi naayos na data.

Isaalang-alang ang mga doc o iba pang mga tutorial ng MySQL upang matuto nang higit pa.