Những gì bạn làm ở đây được gọi là 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 mình, 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ế which (các) ảnh 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 hàm 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 phần CHỌN, 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 các con 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ể hiểu được cách 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 mảng ả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ỳ ảnh và bạn không quan tâm mình sẽ nhận được cái nào, chỉ cần nhóm theo đồ uống (để 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 tôi 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 đơn:
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ó ,
trong các giá trị 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.