ここで行うことは a と呼ばれますJOIN
(ただし、複数のテーブルから選択するため、暗黙的に行います)。これは、WHERE 句に条件を何も指定しなかった場合、それらのテーブルのすべての組み合わせが存在することを意味します。あなたの条件でのみ、飲み物IDが一致する行に結合を制限します。
ただし、この特定の Drinks_id を持つ X 枚の写真がある場合、すべての飲み物の結果には依然として X 個の行があります。あなたの声明は、あなたがどの写真を撮りたいかを制限していません!
ドリンクごとに 1 行だけが必要な場合は、特定の Drinks_id を持つ複数の行がある場合に何をしたいかを SQL に伝える必要があります。このためには、グループ化と集計関数が必要です。どのエントリをグループ化するか (たとえば、すべての Drink_id が等しい) を SQL に指示し、SELECT で、グループ化された各結果行の個別のエントリのどれを取得する必要があるかを指示する必要があります。数値の場合、これは平均、最小、最大 (いくつか挙げると) のいずれかです。
あなたの場合、1行だけが必要な場合、飲み物の写真を照会する意味がわかりません。おそらく、各ドリンクの結果に写真の配列を含めることができると思ったでしょうが、SQL ではこれができません。写真だけが必要で、どれを取得するかを気にしない場合は、drinks_id でグループ化します (ドリンクごとに 1 行のみを取得するため):
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
MySQL には、ファイル名を 1 つの文字列に連結する場合にGROUP_CONCATもあります。
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
,
ただし、フィールド値内にある場合、クライアント側でこれを再度分割する可能性が高いため、これは危険になる可能性があります。また、標準の SQL 集計関数でもありません。