MySQL присоединиться или подзапрос - получить данные о продукте вместе с первым изображением продукта - PullRequest
3 голосов
/ 18 октября 2011

Я хотел бы иметь возможность вернуть миниатюру (первое изображение набора) с данными о моем продукте - каков наилучший способ добиться этого (производительность)?

У меня есть следующие таблицы:

продукты (данные продукта) products_images (отношение между продуктами и изображениями) images (данные изображения)

Таким образом, для каждого продукта будет возвращено первое изображение набора, связанного с этим продуктом.

Две вещи:

  • Я пытаюсь получить первое изображение, но порядок зависит от поля 'order'.
  • Если изображение не найдено, просто верните null для данных изображения, но все же получите продукт.

Я подумываю сделать подзапрос, так как не знаю как упорядочить и ограничитьизображение приводит к объединению.

Что вы предлагаете?

Редактировать:

Поле заказа изображения присутствует в products_images стол.Эта таблица имеет следующие поля (product_id, image_id, order)

Ответы [ 2 ]

2 голосов
/ 18 октября 2011
SELECT 
    p.*
  , i.thumbnail
FROM 
    products AS p
  LEFT JOIN
    images AS i
      ON i.image_id =
         ( SELECT image_id
           FROM products_images AS pi
           WHERE pi.product_id = p.product_id
           ORDER BY `order` ASC                      --- or DESC
           LIMIT 1
         )

Индекс для (product_id, order, image_id) в таблице products_images будет полезен для ускорения выполнения подзапроса.

0 голосов
/ 18 октября 2011

Это должно дать вам первое изображение по столбцу order в таблице product_images:

SELECT *
FROM products p
LEFT JOIN (
    SELECT pi.product_id, i.*
    FROM images i
    INNER JOIN (
        SELECT product_id, image_id
        FROM products_images pi
        ORDER BY `order`        
    ) pi ON i.image_id = i.id
    GROUP BY product_id
) i ON i.product_id = p.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...