Поскольку у вас есть несколько совпадений в вашем JOIN, вы получаете несколько строк для каждой записи в таблице ps_product_lang
.
Поскольку вы хотите получить одну строку на ps_product_lang
, вы должны решить, как агрегировать дату из ps_image
стол. Например, вы можете использовать метод GROUP_CONCAT
с GROUP BY
. Таким образом, ваш запрос может выглядеть следующим образом:
SELECT
ps_product_lang.id_product as id_product,
ps_product_lang.name as title_product,
ps_product_lang.description as product_description,
GROUP_CONCAT(ps_image.id_image) as id_images
FROM
ps_product_lang
INNER JOIN ps_image
ON ps_product_lang.id_product = ps_image.id_product
GROUP BY
-- all not aggregated field must be appears here
ps_product_lang.id_product,
ps_product_lang.name,
ps_product_lang.description
ORDER BY ps_product_lang.id_product ASC;
Другим способом является объединение уже агрегированной таблицы:
SELECT
ps_product_lang.id_product as id_product,
ps_product_lang.name as title_product,
ps_product_lang.description as product_description,
groupped_images.id_images
FROM
ps_product_lang
INNER JOIN (
SELECT
id_product,
GROUP_CONCAT(ps_image.id_image) AS id_images
FROM ps_image
GROUP BY ps_image.id_product
) groupped_images
ON ps_product_lang.id_product = groupped_images.id_product
ORDER BY ps_product_lang.id_product ASC;
В обоих случаях вам не нужно использовать ключевое слово DISTINCT
. Уникальность строк решается правильной группировкой. Оператор GROUP_CONCAT
можно изменить с помощью другой функции агрегирования :