Ce que vous faites ici s'appelle un JOIN
(bien que vous le fassiez implicitement parce que vous sélectionnez dans plusieurs tables). En d'autres termes, si vous n'avez pas mis de conditions dans votre clause WHERE, vous aviez toutes les combinaisons de ces tables. Avec votre condition, vous limitez votre jointure aux lignes où l'identifiant de la boisson correspond.
Mais il y a toujours X lignes multiples dans le résultat pour chaque boisson, s'il y a X photos avec ce drinks_id particulier. Votre déclaration ne restreint pas dont la ou les photos que vous voulez avoir !
Si vous ne voulez qu'une ligne par boisson, vous devez indiquer à SQL ce que vous voulez faire s'il y a plusieurs lignes avec un drinks_id particulier. Pour cela, vous avez besoin d'un regroupement et d'un fonction agrégée . Vous indiquez à SQL les entrées que vous souhaitez regrouper (par exemple, tous les numéros de boissons égaux) et dans le SELECT, vous devez indiquer laquelle des entrées distinctes de chaque ligne de résultats regroupés doit être prise. Pour les nombres, il peut s'agir de la moyenne, du minimum ou du maximum (pour n'en citer que quelques-uns).
Dans votre cas, je ne vois pas l'intérêt d'interroger les photos pour les boissons si vous ne voulez qu'une seule ligne. Vous avez probablement pensé que vous pourriez avoir un série de photos dans votre résultat pour chaque boisson, mais SQL ne peut pas faire ça. Si vous voulez seulement tout photo et que vous ne vous souciez pas de ce que vous obtiendrez, regroupez simplement par le drinks_id (afin d'obtenir une seule ligne par boisson) :
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
Dans MySQL, nous avons également GROUPE_CONCAT si vous voulez que les noms de fichiers soient concaténés en une seule chaîne :
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
Cependant, cela peut devenir dangereux si vous avez ,
dans les valeurs des champs, car il est fort probable que vous souhaitiez diviser à nouveau ces valeurs du côté client. Il ne s'agit pas non plus d'une fonction d'agrégation SQL standard.