Я хотел бы получить список всех продуктов со связанными с ними ценами за данный период.MySql найти товары и цены
Таблица продукта:
Id
Name
Description
Цена Стол:
Id
Product_id
Name
Amount
Start
End
Duration
Самое главное, чтобы не здесь, является то, что продукт может иметь mutliple цены, даже за тот же период, но не с той же продолжительностью. Например, цена от «2013-06-01 -> 2013-06-08», а другая от «2013-06-01 -> 2013-06-05»
Итак, моя цель - получить, для данный период, списки всех продуктов, с разбивкой на 10 продуктов, например, присоединились к ценам, существующим за этот период.
Основной способ сделать это будет:
SElECT *
FROM product
LEFT JOIN prices ON ...
WHERE prices.start >= XXX And prices.end <= YYY
LIMIT 0,10
Проблема при использовании этого простого решения, является то, что я не могу получить только 10 продуктов, но 10 Продукты * Цены, которые не является приемлемым в мое дело.
Таким образом, решение будет:
SElECT *
FROM product
LEFT JOIN prices ON ...
WHERE prices.start >= XXX And prices.end <= YYY
GROUP BY product.id
LIMIT 0,10
Но проблема здесь, я буду только получать «1» цена каждого продукта.
Так что я задаюсь вопросом, каким будет лучший способ справиться с этим. Я мог бы например использовать групповую функцию, такую как «group_concat», и получить в поле все цены в строке, например «200/300/100» и т. Д. Это кажется странным и потребует работы на стороне сервера, чтобы преобразовать в удобочитаемую информацию, но это может сработать.
Другим решением было бы использовать различные колонки для каждой цены, в зависимости от продолжительности:
SELECT
IF(NOT ISNULL(price.start) AND price.duration = 1, price.amount , NULL) AS price_1_day
---- same here for all possible durations ---
From ...
Thta будет работать тоже, я думаю (я не совсем уверен, если это возможно, однако), но Мне может понадобиться создать около 250 столбцов, чтобы охватить все возможности. Это безопасный вариант?
Любая помощь будет оценена
поскольку вы ограничены 10 продуктов у вас есть 2 варианта: использовать 'GROUP_CONCAT', как вы сказали, или имеют 2 запросов, по одному для продукта и один для цен и присоединиться данные на клиентской части. Второй вариант даст вам большую гибкость. – Stephan
Если вы используете группу concat, помните, что ограничение по умолчанию - 1024 символа. Это не должно быть проблемой, если у вас много многих цен. При необходимости его можно изменить с помощью системной переменной group_concat_max_len. – rollcona
Вы хотите, чтобы запись для 10 продуктов или не более 10 записей для каждого продукта, я немного запутался в вашем подходе. – Meherzad