我想检索所有产品的列表,以及给定时期的相关价格。
产品表:
Id
Name
Description
价格表:
Id
Product_id
Name
Amount
Start
End
Duration
最重要的是,一个产品可以有多个价格,即使是在同一时期,但不是在相同的持续时间。例如,“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 列来涵盖所有可能性。这是一个安全的选择吗?
任何帮助都感激不尽