Nhận kết quả của việc tham gia nhiều bảng dưới dạng một hàng


8

Tôi có 2 bảng này:

table1:

id | name
---------
1  | john
2  | jack

table2:

id | profile_id | institution
-----------------------------
1  | 1          | SFU
2  | 1          | UBC
3  | 2          | BU
4  | 2          | USC
5  | 2          | SFU

Nếu tôi muốn nhận tất cả thông tin về người dùng bằng userid của mình, tôi chỉ cần tham gia với họ bằng cách này:

select a.id, a.name, b.institution from table1 a, table2 b
where a.id = USER_ID and a.id = b.profile_id

mà cho USER_ID = 1 trả về:

id | name | institution
-----------------------
1  | john | SFU
1  | john | UBC

Những gì tôi cần thực sự là 1 hàng duy nhất thay vì nhiều hàng. Có phải trong bất kỳ cách nào có thể để có được một cái gì đó như thế này? (Tôi chưa thấy một cái gì đó để làm điều đó nhưng không chắc chắn)

id | name | institution
-----------------------
1  | john | [SFU, UBC]

Câu trả lời:


8

Bạn có thể sử dụng hàm GROUP_CONCAT

SELECT a.id, a.name, CONCAT('[',GROUP_CONCAT(b.institution),']') institution
FROM table1 a INNER JOIN table2 b
ON a.id = b.profile_id
WHERE a.id = USER_ID
GROUP BY a.id, a.name;

hoặc với truy vấn ban đầu của bạn

select a.id, a.name, CONCAT('[',GROUP_CONCAT(b.institution),']') institution
from table1 a, table2 b where a.id = USER_ID and a.id = b.profile_id
group by a.id, a.name;

Hãy thử một lần !!!


GROUP_CONCAT làm điều kỳ diệu! chúc mừng
AliBZ

@RolandoMySQLDBA "... và ở đây đồng hồ của tôi kết thúc": P, tôi đã tìm kiếm điều này từ lâu. Cảm ơn
Mentor PHP
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.