特定の日付と時刻の間の行を DB から返す既存のコードを変更しようとしています。それは正しく機能しますが、以下に説明する機能を追加したいと思います。
これは私のDBの例です
start end
1st row 2012-07-24 18:00:00 2012-07-28 17:00:00
2nd row 2012-07-25 19:00:00 2012-07-30 19:00:00
3rd row 2012-07-25 22:00:00 2012-07-28 13:00:00
4th row 2012-07-25 23:40:00 2012-07-27 18:00:00
...
...
...
入力が2012-07-25 23:00:00の場合 BETWEEN start AND end ORDER by start DESC
結果は、
3rd row
2nd row
1st row
ここまではすべてが素晴らしいです。ただし、次の 2 時間以内 に開始される行をリストの一番上に表示したいと考えています。これは行番号 4 です。
使ってみました
ABS(TIMESTAMPDIFF( HOUR , `start`, :time )) < 2
残念ながら、私は解決策を見つけることができません。
以下は私のコードです。selected
( 、 、city
およびの 3 つの変数を使用しますtype
)
// Store where clauses and values in arrays
$values = $where = array();
if (!empty($selected)) { //
$where[] = ':selected BETWEEN `start` AND `end`';
$values[':selected'] = $selected;
}
if (!empty($city)) { //
$where[] = '`city` = :city';
$values[':city'] = $city;
}
if (!empty($type)) { //
$where[] = '`type` = :type';
$values[':type'] = $type;
}
// Build query
$question = 'SELECT * FROM `events`';
if (!empty($where)) {
$question .= ' WHERE '.implode(' AND ', $where);
$question .= ' ORDER BY `start` DESC';
}
$query = $db->prepare($question);
$query->execute($values);