特定の期間の関連する価格とともに、すべての製品のリストを取得したいと考えています。
製品テーブル:
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列を作成する必要があるかもしれません. それは安全なオプションですか?
どんな助けでも大歓迎です