2

私は日付を格納する価格と呼ばれる単一のmysqlテーブルを持っています:

id    from          to              price
1     2013-11-25    2014-01-08      55

ユーザーが月と年を選択し、その月からまたはその月までのすべての結果を表示したいので、ユーザーが 2013 年 11 月、2013 年 12 月、または 2014 年 1 月のいずれかを選択した場合、上記の行が含まれます。

id    from          to              price
2     2013-10-25    2013-11-07      100

2013 年 10 月または 11 月のいずれかを選択すると、10 月に始まり 11 月に終わるため、上の行が表示されます。

私が試してみました

SELECT * FROM `prices`
WHERE MONTH(prices.from)<={$_SESSION['month']}
AND MONTH(prices.to)>={$_SESSION['month']}
AND YEAR(prices.to)={$_SESSION['year']}
ORDER BY prices.from ASC

これは機能しません。これをどのように行うことができるかわかりません

4

3 に答える 3

1

STR_TO_DATEを使用して、ユーザーが選択した月と年から日付を作成し、DATE_FORMAT を使用てテーブルの日付列を YYYY-MM 形式にし、両方をユーザーが挿入した YYYY-MM と比較できます。

私はphpに堪能ではありませんが、SQLの例を次に示します(無視するため、str_to_dateで任意の日を使用できます):

SELECT * FROM `prices`
WHERE DATE_FORMAT(prices.`from`,"%Y-%m") <= 
   DATE_FORMAT(STR_TO_DATE('01,10,2013','%d,%m,%Y'),"%Y-%m")
AND DATE_FORMAT(prices.`to`,"%Y-%m") >= 
   DATE_FORMAT(STR_TO_DATE('01,10,2013','%d,%m,%Y'),"%Y-%m")
ORDER BY prices.`from` ASC

sqlfiddle demo

于 2013-11-09T18:24:50.720 に答える
0

次の方法に従います。

SELECT * from prices
WHERE str_to_date('{$_SESSION['month']}-{$_SESSION['year']}','%b-%Y') BETWEEN date(prices.from) AND date(prices.to)

str_to_date で正しい形式を使用したいだけかもしれません。現在、次の形式に変換されます = Oct-2013

他の形式については、これを確認してください: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

于 2013-11-09T18:27:49.257 に答える
0

代わりに「BETWEEN」を使用してみてください。例:

SELECT * FROM `prices` WHERE MONTH(`from`) BETWEEN '10' AND '12' AND YEAR(`to`)='2013'
于 2013-11-09T17:58:44.063 に答える