2016-08-09 12 views
5

Tôi có ba bảng: items, junctionproperties. Tôi có năm hạng mục (từ A đến E) và năm thuộc tính (từ 1 đến 5). Qua Bảng Junction, tôi đã gán các thuộc tính như sau:Làm thế nào để ghép nối sản phẩm Descartes từ một bảng Junction Tham gia vào MySQL

A: 1, 3, 5 
B: 1, 2, 3 
C: 1, 4, 5 
D: 1, 2, 3 
E: 1, 4, 5 

Khi tôi chạy truy vấn sau, tôi nhận được một sản phẩm đáng yêu mười lăm (như mong đợi).

SELECT I.id, I.item_name, P.property_name FROM scratch.items I 
JOIN scratch.junction J ON J.item_id = I.id 
JOIN scratch.property P ON J.property_id = P.id; 

Những gì tôi muốn làm là nối tên thuộc tính của mỗi mục vào một trường duy nhất để tôi có thể nhổ chúng ra như thế này:

Record | item_id | item_name | properties 
---------------------------------------------------------------------------- 
    0 | A  | Item A  | Property 1, Property 3, Property 5 
    1 | B  | Item B  | Property 1, Property 2, Property 3 
    2 | C  | Item C  | Property 1, Property 4, Property 5 
    3 | D  | Item D  | Property 1, Property 2, Property 3 
    4 | E  | Item E  | Property 1, Property 4, Property 5 
---------------------------------------------------------------------------- 

Không giống như ví dụ contrived của tôi ở đây, mỗi mục có thể có bất kỳ số các thuộc tính (bao gồm cả số không).

+0

dữ liệu CSV Vì vậy, bạn đang thực sự tiết kiệm trong một cột. Chà, đừng làm thế. Xem [Bàn giao nhau] (http://stackoverflow.com/a/32620163) nếu bạn đang có. Bình thường hóa, tốc độ, sự tỉnh táo, – Drew

+0

Không có CSV ở đây. Bảng Junction không là gì ngoài hai FK chỉ vào các PK của hai bảng kia. Tôi đang cố gắng làm điều này bởi vì tôi đang cố gắng tạo ra một khung nhìn có thể đọc được và tôi không muốn thực hiện phép nối trong logic ứng dụng của mình. – Darkly

+0

Chế độ xem có thể đọc được của con người có thể xảy ra thông qua Chế độ xem. Chỉ cần miễn là bạn không mong đợi để có được hiệu suất làm việc tham gia với 'find_in_set()'. Đó là một điều cần làm 'group_concat()' để in đẹp. Đó là một điều khác để mong đợi một công cụ db được điều chỉnh tốt để lấy dữ liệu dựa trên đầu ra của việc in ấn đẹp mắt. – Drew

Trả lời

3

Bạn có thể sử dụng chức năng group_concat như thế này:

SELECT I.id, I.item_name, group_concat(P.property_name) as properties 
FROM scratch.items I 
JOIN scratch.junction J ON J.item_id = I.id 
JOIN scratch.property P ON J.property_id = P.id 
group by I.id; 
+0

Giải pháp hoàn hảo, 麦 伟锋. Đây là ** _ chính xác _ ** những gì tôi đang tìm kiếm. – Darkly

Các vấn đề liên quan