2016-04-01 17 views
1

予約システムを作成しようとしていて、2つの日付間で予約が既に行われているかどうかを確認したいのですが、しかし、私のSQLは常にfalseを返します。PHP SQL日付を選択してください

$reservation_date_start = date('y-m-d', strtotime($fields['reservation_date_start'])); 
$reservation_date_end = date('y-m-d', strtotime($fields['reservation_date_end'])); 

// Save data to database 
$table_name = $wpdb->prefix . 'mb_bookings'; 

$date_exists = $wpdb->get_results("SELECT * FROM $table_name 
WHERE (reservation_date_start >= $reservation_date_start AND reservation_date_start < $reservation_date_end) 
OR (reservation_date_end >= $reservation_date_start AND reservation_date_end < $reservation_date_end) 
AND (accommodation_id = $accommodation_id)" 
); 

私はすでにだけでなく、任意の成功なしに、BETWEEN機能を使用してみました。

日付がデータベース(YMD)

Dbの例では正しいです:私は今日のためにそれで苦労してきたよう

enter image description here

すべてのヘルプは本当に、いただければ幸いです。..

+0

エラーはどうなりますか?余分な括弧を使用して(a> b)または(b> a)はどこにあるべきですか? – Alex7

+0

'reservation_date_start'と' reservation_date_end'列のデータ型は何ですか? –

+0

@ Alex7私が得ている問題は、クエリが常に0を返すということです。余分な括弧を追加しようとしましたが、まだ成功しません。 – Thjeu

答えて

0

日付形式y-m-dは、16-04-01となります。それをY-m-dに変更して2016-04-01を取得します。クエリが正常に動作するはずです。

あなたのニーズが正しく理解されている場合は、2つのピリオドが重なっているかどうかを確認したいと考えています。私は、(マークがparnethesesとアポストロフィを追加しました)、これはそれを行うべきだと思う:

SELECT * 
FROM $table_name 
WHERE 
(
    (
    STR_TO_DATE('$reservation_date_start', '%Y-%m-%d') <= reservation_date_end 
    AND 
    STR_TO_DATE('$reservation_date_end', '%Y-%m-%d') > reservation_date_start 
    ) 
OR 
    (
    STR_TO_DATE('$reservation_date_end', '%Y-%m-%d') >= reservation_date_start 
    AND 
    STR_TO_DATE('$reservation_date_start', '%Y-%m-%d') < reservation_date_end 
    ) 
) 
AND (accommodation_id = $accommodation_id) 

EDIT重ね合わせる

簡体条件:

SELECT * 
FROM $table_name 
WHERE 
     STR_TO_DATE('$reservation_date_end', '%Y-%m-%d') >= reservation_date_start 
    AND STR_TO_DATE('$reservation_date_start', '%Y-%m-%d') <= reservation_date_end 
    AND accommodation_id = $accommodation_id 
+0

残念ながら、それは何の効果もありませんでした。 $ date_existsクエリは0を返します。 – Thjeu

+0

本当にありがとうございました!あなたは最終的に解決しているソリューションです!あなたのソリューションを理解しようとしているので、これはmySQLがPHPの日付値を読み取ることができないことを意味しますか?それで、STR_TO_DATE関数が必要ですか? – Thjeu

+0

@Tjjuわからない。私は本当にmySQLユーザーではないので、私はSTR_TO_DATEを追加しました。 PostgreSQLでは、文字列 ''2016-04-01 ''だけで動作します。 – Furgas

0
$reservation_date_start = date('Y-m-d',strtotime($fields['reservation_date_start'])); 
$reservation_date_end = date('Y-m-d', strtotime($fields['reservation_date_end'])); 
+0

残念ながら、それは何の効果もありませんでした。 $ date_existsクエリは0を返します。 – Thjeu

0

SELECT *を$ table_nameの どこからBETWEEN reservation_date_start AND $ reservation_date_end;

+0

私はあなたが解決しているとは思わないので、私が間違っている場合は私を修正してください。しかし、 'date_filed'と呼ばれる列がないので、これがどのように機能するかわかりません。 – Thjeu

関連する問題