Как вернуть только одну строку изображения из нескольких соединенных таблиц? - PullRequest
1 голос
/ 23 февраля 2012

У меня есть некоторые sql, которые собирают информацию о продукте. Он также извлекает изображения из объединенных таблиц. Иногда продукт будет иметь более одного изображения (иногда нет), и это приводит к дублированию в результатах. Как изменить этот запрос, чтобы он возвращал только одно изображение (или не было изображений) из объединенных таблиц изображений - image_d, image_p, image_t?

SELECT 
   products_categories.categoryid, 
   products.productid, 
   products.product, 
   products.descr, 
   products.rating, 
   products.title_tag, 
   images_d.image_path AS imaged, 
   images_p.image_path AS imagep, 
   images_t.image_path AS imaget, 
   clean_urls.clean_url 
FROM products_categories 
INNER JOIN products ON products_categories.productid = products.productid 
LEFT JOIN images_d ON products.productid = images_d.id 
LEFT JOIN images_p ON products.productid = images_p.id 
LEFT JOIN images_t ON products.productid = images_t.id 
LEFT JOIN clean_urls ON products.productid = clean_urls.resource_id 
WHERE  products_categories.categoryid = 265 
AND products_categories.main = 'Y' 
AND products.forsale = 'Y'
ORDER  BY productid 

Спасибо.

1 Ответ

1 голос
/ 23 февраля 2012

Я предполагаю, что в данной таблице image_x более одного изображения.Вы можете использовать group_concat() для ввода нескольких значений в один CSV столбец:

SELECT
   products_categories.categoryid, 
   products.productid, 
   products.product, 
   products.descr, 
   products.rating, 
   products.title_tag, 
   group_concat(images_d.image_path) AS imaged, 
   group_concat(images_p.image_path) AS imagep, 
   group_concat(images_t.image_path) AS imaget, 
   clean_urls.clean_url 
FROM products_categories 
INNER JOIN products ON products_categories.productid = products.productid 
LEFT JOIN images_d ON products.productid = images_d.id 
LEFT JOIN images_p ON products.productid = images_p.id 
LEFT JOIN images_t ON products.productid = images_t.id 
LEFT JOIN clean_urls ON products.productid = clean_urls.resource_id 
WHERE products_categories.categoryid = 265 
AND products_categories.main = 'Y'
AND products.forsale = 'Y'
GROUP BY 1,2,3,4,5,6,10
ORDER BY productid 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...