2010-09-08 4 views
33

Tôi có hai bảng, từ khóa và dữ liệu.Làm cách nào để nhóm các hàng mysql có cùng giá trị cột thành một hàng?

Từ khóa bảng có 2 cột (id, từ khóa), dữ liệu bảng có 3 cột (id [khóa ngoại của từ khóa.id], tên, giá trị).

Tôi đang sử dụng truy vấn này:

SELECT k.id, d.value, d.name 
FROM keywords AS k 
INNER JOIN data as d ON k.id = d.id 

nó sẽ trả về một cái gì đó như:

1 123 name1 
1 456 name2 
2 943 name1 
3 542 name1 
3 532 name2 
3 682 name3 

Mỗi id có thể có giá trị 0-3 (có thể nhiều hơn trong tương lai).

Làm cách nào tôi có thể truy xuất tất cả các hàng có cùng id trong cùng hàng?

Giống như

1 123 456 
2 943 
3 542 532 682 

Tôi muốn làm điều này vì tôi muốn để có thể sắp xếp các giá trị.

+2

Đây là loại chuyển đổi thực sự tốt hơn để làm ứng dụng, thay vì yêu cầu MySQL thực hiện. – Amber

+0

Tôi đồng ý với Amber, mặc dù nếu bạn vẫn muốn làm với SQL chỉ, hmm .. Tôi sẽ google chi tiết cho "concat" và "nhóm theo" sql chức năng. –

+0

Tôi muốn làm điều này bởi vì tôi muốn có thể sắp xếp các giá trị, vì vậy nó sẽ là tuyệt vời nếu tôi có thể làm cho nó được sắp xếp từ mysql trực tiếp. Bạn có biết làm thế nào tôi có thể dễ dàng sắp xếp mỗi cột lưu trữ nó trong một mảng php? – jarkam

Trả lời

59

Sử dụng GROUP_CONCAT() như thế này:

SELECT k.id, GROUP_CONCAT(d.value) 
    FROM keywords AS k 
    INNER JOIN data as d ON k.id = d.id 
    GROUP BY k.id 

Ngoài ra, bạn có thể cần phải làm ORDER BY d.name để có được thứ tự chính xác các giá trị như bạn muốn. Như thế này:

SELECT k.id, GROUP_CONCAT(d.value ORDER BY d.name separator ' ') 
    FROM keywords AS k 
    INNER JOIN data as d ON k.id = d.id 
    GROUP BY k.id 
+0

Có Tôi quên GROUP BY ... – jarkam

+0

Bạn đã quên' GROUP BY k.id' chưa? – Amber

+0

@Jarkam, vì bạn chưa sử dụng 'GROUP BY k.id' trong truy vấn này. – shamittomar