これは私の問題です:
いくつかの製品を含む mysql データベースにテーブルがあり、製品が有効な期間を決定する "date_from" と "date_to" という 2 つの列があります。
私の Web サイトには、管理者が 2 つの日時値を選択できるフォームがあり、製品の有効期間が管理者が選択した期間と交差する場合、ページは製品リストを更新します。
これは私のクエリであり、私が望むものを達成するために使用しています:
$sql="SELECT * FROM presents WHERE (date_from>".$date_from." AND date_to<".$date_to.") OR (date_from>".$date_from." AND date_to>".$date_to.") OR (date_from<".$date_from." AND date_to>".$date_to.") OR (date_from<".$date_from." AND date_to<".$date_to.")";
私はこのエラーが発生します:
mysql は次のように述べています: MySql エラー番号: 1064 MySql エラーの説明: SQL 構文にエラーがあります。'.26 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。12:11:43 AND date_to<2012.07.30. 12:11:46) OR (date_from>2012.07.26.12:11:' 行 1
何か案は?
*編集
提案どおりにクエリを変更し、変数に一重引用符を追加しました。エラーは発生しませんが、クエリが想定どおりに動作していないようです。製品リストは同じままです...クエリは次のとおりです。
$sql="SELECT * FROM presents WHERE (date_from>'".$date_from."' AND date_to<'".$date_to."') OR (date_from>'".$date_from."' AND date_to>'".$date_to."') OR (date_from<'".$date_from."' AND date_to>'".$date_to."') OR (date_from<'".$date_from."' AND date_to<'".$date_to."')";
テーブルに次の行があるとします。
ID名 date_from date_to
1 テスト 2012-07-24 16:40:00 2012-07-31 16:40:00
行を返すには、これらすべてのピリオドが必要です。
2012-07-23 16:40:00 から 2012-08-01 16:40:00
2012-07-23 16:40:00 から 2012-07-28 16:40:00
2012-07-26 16:40:00 から 2012-07-28 16:40:00
2012-07-26 16:40:00 から 2012-08-01 16:40:00