MySQL: Sắp xếp các giá trị GROUP_CONCAT


182

Tóm lại: Có cách nào để sắp xếp các giá trị trong câu lệnh GROUP_CONCAT không?

Truy vấn:

GROUP_CONCAT((SELECT GROUP_CONCAT(parent.name SEPARATOR " » ") 
FROM test_competence AS node, test_competence AS parent 
WHERE node.lft BETWEEN parent.lft AND parent.rgt 
  AND node.id = l.competence 
  AND parent.id != 1 
ORDER BY parent.lft) SEPARATOR "<br />\n") AS competences

Tôi nhận được hàng này:

Thủ công mỹ nghệ »

Quản trị »Tổ chức

Tôi muốn nó như thế này:

Quản trị »Tổ chức

Thủ công mỹ nghệ »


Câu trả lời:


388

Chắc chắn, hãy xem http://dev.mysql.com/doc/refman/...tions.html#feft_group-concat :

SELECT student_name,
  GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ')
  FROM student
  GROUP BY student_name;

Mã của bạn chủ yếu dựa vào câu trả lời cụ thể của bạn và do đó không nên đặt ở bất cứ đâu ngoài bài đăng gốc của bạn. Nếu bạn đặt nó ở đây trong bình luận này, nhiều lập trình viên ở đây sẽ không thấy nó và bạn sẽ không nhận được phản hồi tốt nhất có thể :)
Sampson

Đáng buồn nhưng là sự thật. :) Mã đó có đủ hay tôi nên viết toàn bộ truy vấn?
Ivar

Bạn đã thử ASC thay vì DESC chưa?
Sampson

Tôi đã không sử dụng một trong hai (ASC = mặc định).
Ivar

10
Tôi không biết bạn có thể order bytrong một group_concatthời điểm chính xác. Giải quyết một vấn đề tôi đang gặp phải. Cảm ơn!
DiMono

22

Bạn có nghĩa là để đặt hàng bởi?

SELECT _key,            
COUNT(*) as cnt,            
GROUP_CONCAT(_value ORDER BY _value SEPARATOR ', ') as value_list      
FROM group_concat_test      
GROUP BY _key      
ORDER BY _key;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.