Поскольку вы используете MySQL, я дам вам специфичное для MySQL решение, которое очень просто:
SELECT
gallery.id,
gallery.thumbnail_big,
products.id,
products.title,
products.size,
products.price,
products.text_description,
products.main_description
FROM gallery
INNER JOIN products
ON gallery.id=products.id
GROUP BY products.id
Конечно, это возвращает произвольные gallery.id и thumbnail_big, но вы этого не сделалиуказал, какой вы хотите.На практике это будет тот, который сначала физически хранится в таблице, но у вас мало контроля над этим.
Вышеприведенный запрос неоднозначен, поэтому он не будет разрешен ANSI SQL и большинством брендов.СУРБД.Но MySQL допускает это (SQLite тоже делает, чего бы это ни стоило).
Лучшее решение - сделать запрос не двусмысленным.Например, если вы хотите получить изображение галереи, имеющее самое высокое значение первичного ключа:
SELECT
g1.id,
g1.thumbnail_big,
p.id,
p.title,
p.size,
p.price,
p.text_description,
p.main_description
FROM products p
INNER JOIN gallery g1 ON p.id = g1.id
LEFT OUTER JOIN gallery g2 ON p.id = g2.id AND g1.pkey < g2.pkey
WHERE g2.id IS NULL
Я должен предположить, что у вас есть другой столбец gallery.pkey
, который является автоинкрементным или иным образом служит для уникальногоразличать галерею изображений для данного продукта.Если у вас нет такого столбца, вам нужно его создать.
Затем запрос пытается найти строку g2
для того же продукта, которая больше g1
.Если такой строки не существует, то g1
должна быть самой большой строкой.