Những gì bạn làm ở đây được gọi là a JOIN
(mặc dù bạn làm điều đó một cách ngầm định vì bạn chọn từ nhiều bảng). Điều này có nghĩa là, nếu bạn không đặt bất kỳ điều kiện nào trong mệnh đề WHERE của mình, bạn có tất cả các kết hợp của các bảng đó. Chỉ với tình trạng của bạn, bạn mới hạn chế tham gia vào những hàng có id đồ uống phù hợp.
Nhưng vẫn có X nhiều hàng trong kết quả cho mỗi đồ uống, nếu có X ảnh với đồ uống cụ thể này. Tuyên bố của bạn không hạn chế mà ảnh (s) bạn muốn có!
Nếu bạn chỉ muốn một hàng cho mỗi đồ uống, bạn phải cho SQL biết bạn muốn làm gì nếu có nhiều hàng với một đồ uống cụ thể. Đối với điều này, bạn cần nhóm và một chức năng tổng hợp . Bạn cho SQL biết mục nhập nào bạn muốn nhóm lại với nhau (ví dụ: tất cả các loại đồ uống bằng nhau) và trong SELECT, bạn phải cho biết mục nhập nào trong số các mục nhập riêng biệt cho mỗi hàng kết quả được nhóm lại. Đối với số, đây có thể là trung bình, tối thiểu, tối đa (để đặt tên cho một số).
Trong trường hợp của bạn, tôi không thể truy vấn ảnh đồ uống nếu bạn chỉ muốn một hàng. Bạn có thể nghĩ rằng bạn có thể có một loạt các bức ảnh trong kết quả của bạn cho mỗi đồ uống, nhưng SQL không thể làm điều này. Nếu bạn chỉ muốn bất kỳ bức ảnh nào và bạn không quan tâm bạn sẽ nhận được cái nào, chỉ cần nhóm theo đồ uống_id (để chỉ nhận được một hàng cho mỗi đồ uống):
SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
GROUP BY drinks_id
name price photo
fanta 5 ./images/fanta-1.jpg
dew 4 ./images/dew-1.jpg
Trong MySQL, chúng ta cũng có GROUP_CONCAT , nếu bạn muốn các tên tệp được nối với một chuỗi duy nhất:
SELECT name, price, GROUP_CONCAT(photo, ',')
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
GROUP BY drinks_id
name price photo
fanta 5 ./images/fanta-1.jpg,./images/fanta-2.jpg,./images/fanta-3.jpg
dew 4 ./images/dew-1.jpg,./images/dew-2.jpg
Tuy nhiên, điều này có thể trở nên nguy hiểm nếu bạn có ,
các giá trị trong trường, vì rất có thể bạn muốn tách lại giá trị này ở phía máy khách. Nó cũng không phải là một hàm tổng hợp SQL tiêu chuẩn.