Lấy danh sách sản phẩm gồm nhiều biến thể khác nhau

Chào mn. Hiện tại mình trong database mình có tạo 4 bảng. Đại loại ý tưởng của mình là một sản phẩm X sẽ được chia nhỏ ra gồm nhiều biến thể khác dựa theo màu sắc và kích thước.
4 bảng gồm: san_pham, mau_sac, kich_thuoc, bien_the_san_pham
Trong đó, bien_the_san_pham có cột product_id là foreign key tham chiếu đến khóa chính id của san_pham, color_id tham chiếu đến khóa chính id của mau_sac, size_id tham chiếu đến kich_thuoc.
Bây giờ khi muốn lấy ra danh sách sản phẩm cùng với các biến thể của nó thì mình tính sử dụng LEFTJOIN cả 4 bảng với nhau để lấy ra tất cả các biến thể dựa vào bảng bien_the_san_pham. Sau đó sử dụng vòng lặp để nhóm riêng từng biến thể lại theo id trong san_pham.
Mn có thể tư vấn cho mình xem liệu có cách nào giúp thực hiện công việc trên nhanh gọn hơn giúp mình với ạ. Cảm ơn mn. Dưới là truy vấn của mình và kết quả trả về:

SELECT
    products.id,
    products.name,
    product_sizes.NAME AS size,
    product_colors.NAME AS color
FROM
    product_variation
    LEFT JOIN products ON products.id = product_variation.product
    LEFT JOIN product_sizes ON product_variation.size = product_sizes.id
    LEFT JOIN product_colors ON product_variation.color = product_colors.id
id name size color
01 San pham 01 Size M Mau do
02 San Pham 02 Size M Mau do
01 San Pham 01 Size M Mau xanh
01 San Pham 01 Size M Mau cam
01 San Pham 01 Size S Mau do

nhóm riêng là sao? trước khi nhóm và sau khi nhóm khác nhau như nào? ví dụ? câu query và kết quả bên dưới ý nghĩa là gì trong câu hỏi này?

câu hỏi quá tối nghĩa

2 Likes

LEFT JOIN sẽ ra toàn là NULL thôi. Bài này INNER JOIN là được.

4 Likes

Ths! Cảm ơn sự giúp đỡ của bạn

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?