โดยทั่วไปคำถามคือวิธีการได้รับจากสิ่งนี้:
foo_id foo_name 1 A 1 B 2 C
สำหรับสิ่งนี้:
foo_id foo_name 1 AB 2 C
โดยทั่วไปคำถามคือวิธีการได้รับจากสิ่งนี้:
foo_id foo_name 1 A 1 B 2 C
สำหรับสิ่งนี้:
foo_id foo_name 1 AB 2 C
คำตอบ:
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
จากลิงค์ด้านบนGROUP_CONCAT
: ฟังก์ชั่นนี้จะส่งคืนผลลัพธ์สตริงด้วยค่าที่ไม่ต่อกันที่ไม่ใช่ค่า NULL จากกลุ่ม มันจะส่งกลับค่า NULL หากไม่มีค่าที่ไม่ใช่ค่า NULL
SELECT id, GROUP_CONCAT( string SEPARATOR ' ') FROM table GROUP BY id
จากลิงค์ด้านบนGROUP_CONCAT
: ฟังก์ชั่นนี้จะส่งคืนผลลัพธ์สตริงด้วยค่าที่ไม่ต่อกันที่ไม่ใช่ค่า NULL จากกลุ่ม มันจะส่งกลับค่า NULL หากไม่มีค่าที่ไม่ใช่ค่า NULL
SELECT id, GROUP_CONCAT(CAST(name as CHAR)) FROM table GROUP BY id
จะให้สตริงที่คั่นด้วยจุลภาค
SELECT id, GROUP_CONCAT(name SEPARATOR ' ') FROM table GROUP BY id;
: - ใน MySQL คุณสามารถรับค่าการรวมกันของนิพจน์ที่ต่อกันได้ หากต้องการกำจัดค่าที่ซ้ำกันให้ใช้ส่วนคำสั่งDISTINCT ในการจัดเรียงค่าในผลลัพธ์ให้ใช้ส่วนคำสั่ง ORDER BY หากต้องการเรียงลำดับแบบย้อนกลับให้เพิ่มคีย์เวิร์ดDESC (มากไปหาน้อย) ลงในชื่อของคอลัมน์ที่คุณเรียงลำดับตามในประโยค ORDER BY ค่าเริ่มต้นคือลำดับขึ้น; อาจมีการระบุอย่างชัดเจนโดยใช้คำหลัก ASC ตัวคั่นเริ่มต้นระหว่างค่าในกลุ่มคือเครื่องหมายจุลภาค (“,”) ในการระบุตัวคั่นอย่างชัดเจนให้ใช้ SEPARATOR ตามด้วยค่าตัวอักษรสตริงที่ควรแทรกระหว่างค่ากลุ่ม เพื่อขจัดคั่นทั้งหมดระบุSEPARATOR ''
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
หรือ
mysql> SELECT student_name,
-> GROUP_CONCAT(DISTINCT test_score
-> ORDER BY test_score DESC SEPARATOR ' ')
-> FROM student
-> GROUP BY student_name;
ผลลัพธ์ถูกปัดเศษเป็นความยาวสูงสุดที่กำหนดโดยตัวแปรระบบ group_concat_max_len ซึ่งมีค่าเริ่มต้นที่ 1024 อักขระดังนั้นก่อนอื่นเราจะ:
SET group_concat_max_len=100000000;
จากนั้นเช่น:
SELECT pub_id,GROUP_CONCAT(cate_id SEPARATOR ' ') FROM book_mast GROUP BY pub_id
group_concat_max_len
คืออะไร? การเชื่อมต่อ / เซสชันปัจจุบันหรือจะส่งผลกระทบต่อไคลเอนต์อื่น ๆ
คำตอบที่ดี ฉันยังมีปัญหากับ NULLS และจัดการแก้ไขด้วยการรวม COALESCE ภายใน GROUP_CONCAT ตัวอย่างดังต่อไปนี้:
SELECT id, GROUP_CONCAT(COALESCE(name,'') SEPARATOR ' ')
FROM table
GROUP BY id;
หวังว่านี่จะช่วยคนอื่นได้