у меня есть три таблицы для продуктов, конфигурации продуктов (например, iPhone x 64 черный, iPhone x 64 красный) и инвентаризации продуктов; Я хочу выбрать все продукты и отсортировать их по цене (в таблице конфигурации) и доступности (в таблице инвентаризации), но получить только одну строку для каждого продукта; как id может это сделать?
ниже моя структура таблицы MySQL
CREATE TABLE `product_inventories` (
`inventory_id` bigint(20) NOT NULL,
`quantity` int(11) NOT NULL,
`warehouse_id` bigint(20) DEFAULT NULL,
`config_id` bigint(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `product_configs` (
`config_id` bigint(20) NOT NULL,
`product_id` bigint(20) DEFAULT NULL,
`price` decimal(12,3) DEFAULT NULL,
`discount_percent` int(11) DEFAULT NULL,
`sku` varchar(30) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
CREATE TABLE `products` (
`id` bigint(20) NOT NULL,
`title` varchar(255) DEFAULT NULL,
`category_id` bigint(20) NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
я пробовал этот запрос:
SELECT *
FROM products
LEFT JOIN product_configs ON products.id = product_configs.product_id
LEFT JOIN product_inventories inventories ON inventories.inventory_id =
(SELECT product_inventories.inventory_id from product_inventories
WHERE product_inventories.config_id = product_configs.config_id
ORDER by product_inventories.quantity DESC LIMIT 1 )
ORDER BY product_configs.price ASC, inventories.quantity DESC
редактирование:
с этим запросом:
SELECT *
FROM products
LEFT JOIN product_configs ON products.id = product_configs.product_id
LEFT JOIN product_inventories inventories ON inventories.inventory_id =
(SELECT product_inventories.inventory_id from product_inventories
WHERE product_inventories.config_idd = product_configs.config_id
ORDER by product_inventories.quantity DESC LIMIT 1 )
ORDER BY product_configs.price is null, product_configs.price ASC, inventories.quantity DESC
У меня есть результат ниже; но я хочу один продукт в конфигурации с минимальной ценой и максимальным количеством