Как вернуть изображение с наивысшей оценкой для данного товара? - PullRequest
2 голосов
/ 08 ноября 2011

У меня есть две таблицы: products и product_images.У меня тоже есть третья таблица 'product_categorys', но я не уверен, насколько это актуально для вопроса).

В таблице «Изображения продуктов» у меня есть столбец с именем Score как int, а также столбец product_id.Я хотел бы выбрать строку или строки из таблицы продуктов и получить наивысшее возвращаемое изображение.Пока у меня есть это:

SELECT `products`.*, `product_categorys`.`categoryName`, `product_categorys`.`categoryDescription`, `product_images`.`thumbName`
FROM (`products`)
INNER JOIN `product_categorys` ON `products`.`categoryID` = `product_categorys`.`pid`
left JOIN `product_images` ON `products`.`pid` = `product_images`.`productID`
WHERE `products`.`vendorID` =  '14'
AND `products`.`deleted` =  0
GROUP BY `products`.`pid`
ORDER BY `title` asc
LIMIT 10

, который возвращает изображение продукта, но не самый высокий балл, я не уверен, как мне изменить этот запрос (это было сгенерировано codeigniter), чтобы дать мнечто мне нужно.

Что нужно изменить / добавить, чтобы запрос мог вернуть изображение с наивысшей оценкой, пожалуйста?

1 Ответ

2 голосов
/ 08 ноября 2011

Я не знаю, это работает, но попробуйте:

SELECT p.*, 
       pc.categoryName, pc.categoryDescription, 
       pim.thumbName, pim.score
FROM products p INNER JOIN product_categorys pc 
    ON p.categoryID = pc.pid
LEFT JOIN product_images pim 
    ON p.pid = pim.productID
WHERE p.vendorID =  '14'
  AND p.deleted =  0
  AND (pim.score = 
      (SELECT MAX(score) FROM product_images pim2 
       WHERE p.pid = pim2.productID)
   OR pim.score IS NULL)
GROUP BY p.pid
ORDER BY title ASC
LIMIT 10
...