Apa yang Anda lakukan di sini disebut JOIN
(walaupun Anda melakukannya secara implisit karena Anda memilih dari beberapa tabel). Ini berarti, jika Anda tidak memasukkan kondisi apa pun dalam klausa WHERE Anda, Anda memiliki semua kombinasi dari tabel-tabel itu. Hanya dengan syarat Anda, Anda membatasi bergabung Anda ke baris di mana id minuman cocok.
Tapi masih ada X beberapa baris di hasil untuk setiap minuman, jika ada X foto dengan drink_id khusus ini. Pernyataan Anda tidak membatasi yang mana foto yang ingin Anda miliki!
Jika Anda hanya ingin satu baris per minuman, Anda harus memberi tahu SQL apa yang ingin Anda lakukan jika ada beberapa baris dengan id_minuman tertentu. Untuk ini, Anda memerlukan pengelompokan dan fungsi agregat . Anda memberi tahu SQL entri mana yang ingin Anda kelompokkan bersama (misalnya semua drink_ids yang sama) dan di SELECT, Anda harus memberi tahu entri mana yang berbeda untuk setiap baris hasil yang dikelompokkan yang harus diambil. Untuk angka, ini bisa menjadi rata-rata, minimum, maksimum (untuk menyebutkan beberapa).
Dalam kasus Anda, saya tidak dapat melihat arti untuk menanyakan foto-foto minuman jika Anda hanya menginginkan satu baris. Anda mungkin berpikir Anda dapat memiliki berbagai foto di hasil Anda untuk setiap minuman, tetapi SQL tidak dapat melakukan ini. Jika Anda hanya ingin apa saja foto dan Anda tidak peduli mana yang akan Anda dapatkan, cukup kelompokkan berdasarkan drink_id (untuk mendapatkan hanya satu baris per minuman):
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
Di MySQL, kami juga memiliki GROUP_CONCAT , jika Anda ingin nama file digabungkan menjadi satu string:
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
Namun, ini bisa berbahaya jika Anda memiliki ,
dalam nilai bidang, karena kemungkinan besar Anda ingin membagi ini lagi di sisi klien. Ini juga bukan fungsi agregat SQL standar.