0

今日の値があるかどうかを確認するクエリを実行し、ない場合は、今日より前の最も近いエントリを表示したいと考えています。

これは私が使用するクエリです:

$variable = 'var1';

SELECT * FROM `table` WHERE `something` = '".$variable."' 
                      AND `last_updated` = NOW() OR last_updated < NOW()

table次のように見えるとしましょう:

something | last_updated
 var1     |  2013-08-04
 var1     |  2013-08-05
 var1     |  2013-08-06

=で削除するvar1と、クエリが返されますlast_updated2013-08-062013-08-04

2013-08-06今日がこのクエリを使用している場合、前日 (または最も近い日) に返されないのはなぜですか?

4

7 に答える 7

1

試す:

SELECT * FROM table
WHERE
    something = variable
AND
    last_updated <= CURDATE()
ORDER BY
    last_updated DESC
LIMIT 1

last_updated列にインデックスを追加することで、クエリを高速化できる場合があります

于 2013-08-06T12:47:08.103 に答える
0

これは、 のエントリがlast_updated = 2013-08-04条件に一致する最初の行であるためlast_updated < now()です。クエリは 2 番目の行も返すと確信していますが、結果セットの最初の行を見ているだけだと思います。答えはそれほど明確ではありません)。したがって、

ORDER BY last_updated DESC

さらに追加しながら、最初の行が条件に一致する最新の行であることを確認します

LIMIT 1

それが返される唯一のものであることを保証します。

于 2013-08-06T12:34:22.400 に答える