私は今週のリマインダを引き出す方法を理解できないようですが、何かアドバイスをいただければ幸いです。mysqlから日付を引き上げると、今後すべての日が返されます
$query = ("SELECT * FROM contacts WHERE reminder >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) ORDER BY firstname") or die ('Error: ' .mysql_error());
私は今週のリマインダを引き出す方法を理解できないようですが、何かアドバイスをいただければ幸いです。mysqlから日付を引き上げると、今後すべての日が返されます
$query = ("SELECT * FROM contacts WHERE reminder >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) ORDER BY firstname") or die ('Error: ' .mysql_error());
非常に単純なアプローチ:
WHERE YEARWEEK(reminder) = YEARWEEK(NOW())
。それは動作しますが、reminder
のインデックスを使用しません(インデックスがあると思います)。また、レコードごとにが実行されます。正しい方法は、WHERE reminder >=[start_date] and reminder <= [end_date]
(またはreminder BETWEEN [start_date] AND [end_date]
)のようなクエリを使用することです。[start_date]と[end_date]はそれぞれ今週の最初と最後の日を表します。クライアント側でこれらの日付を計算する方が簡単だと思いますが、希望の日付を返す関数をmysqlに書くことも可能です。
彼は自分のPHPコードで2つの日付を取得し、それらをクエリーに入れるべきです。そうすれば、MySQLが日付カラム上のインデックスを使用することができます。ここで、あなたのソリューションは関数を使用するので、それはできません。これが唯一の列であるため、それはひどいことです。 –
@Dan Grossman:前もって開始日と終了日を計算する方がはるかに良い – a1ex07
その他の質問には、PHP関数が使用されています。重複はありません! – fancyPants