To, co tutaj robisz, nazywa się JOIN
(chociaż robisz to niejawnie, ponieważ wybierasz z wielu tabel). Oznacza to, że jeśli nie umieściłeś żadnych warunków w klauzuli WHERE, masz wszystkie kombinacje tych stołów. Tylko ze swoim stanem możesz ograniczyć dołączanie do tych wierszy, w których pasuje identyfikator napoju.
Ale nadal istnieje X wielu wierszy w wyniku dla każdego drinka, jeśli jest X zdjęć z tym konkretnym drink_id. Twoje oświadczenie nie ogranicza którego zdjęcia, które chcesz mieć!
Jeśli chcesz mieć tylko jeden wiersz na drinka, musisz powiedzieć SQL, co chcesz zrobić, jeśli istnieje wiele wierszy o określonym identyfikatorze drink_id. W tym celu potrzebujesz grupowania i funkcji agregującej . Mówisz SQL, które wpisy chcesz zgrupować (na przykład wszystkie równe drinki_ids), a w SELECT musisz powiedzieć, które z odrębnych wpisów dla każdego zgrupowanego wiersza wyników powinny być wzięte. W przypadku liczb może to być średnia, minimalna, maksymalna (żeby wymienić niektóre).
W twoim przypadku nie widzę sensu kwestionowania zdjęć o napoje, jeśli chcesz tylko jeden wiersz. Prawdopodobnie myślałeś, że możesz mieć tablicę zdjęć w wyniku dla każdego drinka, ale SQL nie może tego zrobić. Jeśli chcesz tylko dowolnego zdjęcie i nie obchodzi Cię, które dostaniesz, po prostu pogrupuj według drinks_id (aby uzyskać tylko jeden wiersz na drinka):
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
W MySQL mamy również GROUP_CONCAT , jeśli chcesz, aby nazwy plików były połączone w jeden ciąg:
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
Może to jednak stać się niebezpieczne, jeśli masz ,
w obrębie wartości pól, ponieważ najprawdopodobniej chcesz podzielić to ponownie po stronie klienta. Nie jest to również standardowa funkcja agregująca SQL.