Вот запрос:
SELECT product.catalog_product_id AS catalog_id, listing.id AS listing_id,
product.size AS size, 0 AS amount,
listing.list_price AS price,
listing.created_at AS created_date
FROM product
INNER JOIN listing ON listing.product_id = product.id
WHERE product.catalog_product_id = XXXX
AND listing.id = (
SELECT l.id
FROM listing l
INNER JOIN product i ON l.product_id = i.id
WHERE i.size = product.size AND i.catalog_product_id = XXXX
ORDER BY l.list_price ASC, l.created_at ASC
LIMIT 1
)
Sub Query - это идентификатор для получения списка по самой низкой цене. Sub Query замедляется с Order by. Я уже создал индексы, и это все еще занимает 5-6 секунд.
Структура таблицы:
каталог: это таблица каталога основных продуктов
Catalog
-------
id
sku
name
description
products: Варианты продуктов (варианты размера)
Products
--------
id
catalog_id
size
таблица списков :: список товаров магазина, опция «Один размер товара» может иметь несколько списков товаров с разными ценами.
listing
---------
id
product_id
list_price
created_at
Выход:
http://prntscr.com/kqh7fg
Показывает самую низкую цену для каждого списка и размера.