1

たとえば、両方で DATE_SUB() を使用して、(date-7days) と (date-1day) の間の日付範囲の間で (pdo php と mysql を使用して) 検索クエリを実行しようとしています:

end_date is 2013-03-26
search between 2013-03-19 and 2013-03-25 ` 

ただし、以下のクエリは最初の date_sub(7 日間隔) を使用していますが、2 番目 (date_sub(1 日間隔)) を無視しているため、2013-03-19 と 2013-03-26 の間で検索しています。

$sevd_query = " 
    SELECT 
        booking_id,
        DATE_FORMAT(start_date, '%e/%c') AS s_d,
        DATE_FORMAT(end_date, '%e/%c') AS e_d
    FROM 
        bsi_bookings as bb 
    INNER JOIN 
        bsi_reservation as br ON bb.booking_id=br.bookings_id
    WHERE 
        bc.c_id=:c_id AND
       :day BETWEEN DATE_SUB(bb.end_date, INTERVAL 7 DAY) AND DATE_SUB(bb.end_date, INTERVAL 1 DAY)
";

誰でも助けてもらえますか?私はこれを1週間修正しようとしてきましたが、運がありません

4

1 に答える 1

0

句:

:day BETWEEN DATE_SUB(bb.end_date, INTERVAL 7 DAY) AND
             DATE_SUB(bb.end_date, INTERVAL 1 DAY)

次のように表現できます。

day >= (end_date - 7) AND
day <= (end_date - 1)

次のように書き換えることができます。

(day + 7) >= end_date AND
(day + 1) <= end_date

これは次と同じです:

end_date <= (day + 7) AND
end_date >= (day + 1)

また、次のとおりです。

end_date >= (day + 1) AND
end_date <= (day + 7)

次のようにも記述できます。

end_date BETWEEN (day + 1) AND (day + 7)

私はあなたが望むものではないと思います。

代わりにこれを試してください:

SELECT 
    booking_id,
    DATE_FORMAT(start_date, '%e/%c') AS s_d,
    DATE_FORMAT(end_date, '%e/%c') AS e_d
FROM 
    bsi_bookings as bb 
INNER JOIN 
    bsi_reservation as br ON bb.booking_id=br.bookings_id
WHERE 
    bc.c_id=:c_id AND
    bb.end_date BETWEEN :day - INTERVAL 7 DAY AND :day - INTERVAL 1 DAY;

フィールドにインデックスが付けられている場合はend_date、インデックスを使用できます。

検索するフィールドが関数内に含まれている場合、インデックスは使用されません。

于 2013-03-27T00:40:48.183 に答える