ここで行うことは、 JOIN
と呼ばれます。
(ただし、複数のテーブルから選択するため、暗黙的に実行します)。つまり、WHERE句に条件を設定しなかった場合は、すべての組み合わせがあります。 それらのテーブルの。条件がある場合にのみ、飲み物IDが一致する行に結合を制限します。
ただし、この特定のdrinks_idを含むX枚の写真がある場合、すべての飲み物の結果にはX個の複数の行があります。あなたの声明はどのを制限しません 撮りたい写真!
飲み物ごとに1行だけが必要な場合は、特定のdrinks_idを持つ行が複数ある場合に何をしたいかをSQLに指示する必要があります。このためには、グループ化と集計関数が必要です。 a> 。グループ化するエントリ(たとえば、すべて等しいdrinks_ids)を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には、GROUP_CONCATもあります。 、ファイル名を1つの単一の文字列に連結する場合:
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集計関数でもありません。