datetime timestamp
を含むテーブルがあります。私が探しているのは、datetime timestamp
に基づいて、30日の有効期限からちょうど3日後のレコードを選択することです。
これは正しいとは思えませんが、ここまでのところです。
SELECT jobs.*,occupations.title
FROM jobs
LEFT JOIN occupations on occupations.id = jobs.occupation_id
WHERE DATE_ADD(jobs.`date_created`,INTERVAL 27 DAY) = DATE(NOW())
助けてください :)
date_created
がDATE
の場合は、次のようにします。
SELECT jobs.*,occupations.title
FROM jobs
LEFT JOIN occupations on occupations.id = jobs.occupation_id
WHERE jobs.`date_created` = DATE(NOW() - INTERVAL 27 DAY);
date_created
がDATETIME
またはTIMESTAMP
で、時間部分が「00:00:00」の場合、次のようにします。
SELECT jobs.*,occupations.title
FROM jobs
LEFT JOIN occupations on occupations.id = jobs.occupation_id
WHERE jobs.`date_created` >= DATE(NOW() - INTERVAL 27 DAY) + INTERVAL 0 SECOND;
これらのクエリは、クエリのWHERE
句がインデックスレンジスキャンを誘発するのに対し、質問のWHERE
句はテーブル全体を誘発するため、問題のクエリよりもパフォーマンスの点で優れています。スキャン(date_created
がインデックス付けされている場合でも)。
jobs
テーブルにdate_created
のインデックスがない場合は、インデックスを作成します
ALTER TABLE jobs ADD INDEX (date_created);
試してみる !!