Господа, подскажите, как сделать запрос в бд, что правильно объединить 2 таблицы.
Первая таблица product(id, name, price, .....)
Вторая images (id, img_src, img_alt, ...)
Мне надо, что бы у каждого продукта был массив с фоткми, так как несколько фоток относятся к одному продукту. Но на выходе у меня получается сколько фоток относится к продукту, столько раз повторяется данный продукт. Как только не пытался. Вот один из вариантов:
SELECT images.image_src, images.image_alt, product.*
from product
LEFT JOIN images on images.prod_id = product.id
В базе всего 2 товара, я получаю 6, так как на каждую фотку плодится отдельный массив продукта, а мне надо что у одного продукта был массив с фотками относящихся к нему. Прошу сразу прощения, я не знаю особо как делаются запросы, но времени читать талмуды на данный момент совсем нет.
Решил проблему конкатинацией.
SELECT product.*, GROUP_CONCAT(images.image_src) AS img from product left join images on images.prod_id=product.id GROUP BY product.id
В принципе вы можете воспользоваться аггрегатными функциями базы данных.
Например так:
SELECT
JSON_ARRAYAGG(
JSON_OBJECT(
'image_src', images.image_src,
'image_alt', images.image_alt
)
) image,
product.*
FROM product
LEFT JOIN images ON images.prod_id = product.id
GROUP BY
product.id,
product.name;
сложный запрос, он не сработал к сожалению. Не могу даже сказать где ошибка, мне бы вообще понять как хранятся фото в бд, некоторые пишут, что хранят в поле images строку json. Я правда так не делал никогда, потом ее надо распарсить, но больше беспокоит как туда дописывать данные когда через форму будут добавлять фото к имеющимся товарам.