Điều bạn làm ở đây được gọi là JOIN
(mặc dù bạn làm điều này hoàn toàn 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 trong các bảng đó. Chỉ với điều kiện của bạn, bạn hạn chế tham gia của bạn với những hàng nơi id uống phù hợp.
Nhưng vẫn còn X nhiều hàng trong kết quả cho mỗi đồ uống, nếu có X ảnh với drink_id cụ thể này. Tuyên bố của bạn không giới hạn trong đó ả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 nói cho SQL biết bạn muốn làm gì nếu có nhiều hàng với một graphics_id cụ thể. Đối với điều này, bạn cần nhóm và aggregate function. Bạn cho SQL biết các mục mà bạn muốn nhóm lại với nhau (ví dụ tất cả các đối tượng đồ uống bằng nhau) và trong SELECT, bạn phải cho biết các mục riêng biệt nào cho mỗi hàng kết quả được nhóm sẽ được thực hiện. Đối với các con số, điều nà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ể thấy ý nghĩa khi truy vấn ảnh cho đồ 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 mình 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à bạn sẽ nhận được, chỉ cần nhóm bởi drinks_id (theo thứ tự để có được chỉ có một hàng cho mỗi thức 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 tên tập tin để đượ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ể nguy hiểm nếu bạn có ,
trong các giá trị trường, vì rất có thể bạn muốn chia nhỏ lại điều 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 chuẩn.
Bạn cũng có 5 hàng phù hợp, vì bạn có một số hàng có cùng đồ uống_id. Bạn sẽ mong đợi điều gì sẽ xảy ra? Bạn muốn giữ ảnh nào? –