特定の過去の日付から現在までの範囲のUNIXタイムスタンプを選択するためのクエリが必要ですか?たとえば、現在の日付まで「2013-01-01」を選択する必要があります。私は特定の年にそれをすることができました。どんな助けでもいただければ幸いです。
SELECT mdl_user_info_data.data, mdl_user.firstname, mdl_user.lastname, mdl_user.id AS userid, SUM( mdl_quiz.fcpd ) AS cpdtotal
FROM mdl_grade_grades
INNER JOIN mdl_user ON mdl_grade_grades.userid = mdl_user.id
INNER JOIN mdl_grade_items ON mdl_grade_grades.itemid = mdl_grade_items.id
INNER JOIN mdl_quiz ON mdl_grade_items.itemname = mdl_quiz.name
INNER JOIN mdl_course ON mdl_grade_items.courseid = mdl_course.id
INNER JOIN mdl_user_info_data ON mdl_user.id = mdl_user_info_data.userid
WHERE mdl_user_info_data.fieldid =1
AND mdl_grade_items.itemname IS NOT NULL
AND YEAR( FROM_UNIXTIME( mdl_grade_grades.timemodified ) ) =2013
GROUP BY mdl_user.id
この行を置き換えるだけです:
AND YEAR(FROM_UNIXTIME(mdl_grade_grades.timemodified)) = 2013
に:
AND FROM_UNIXTIME(mdl_grade_grades.timemodified)
BETWEEN '2012-01-01 12:00'
AND now()
timemodified
列にUNIXタイムスタンプを保存しているようです。timestamp
タイプに変更することを検討する必要があります。これにより、そのフィールドのインデックスを利用できるようになります。これで、クエリ(およびこのクエリも)は遅くなります。これはFROM_UNIXTIME()
、そのテーブルのすべての行を計算してから、年または日付を比較する必要があるためです。
更新:
タイプを変更したくない場合は、これを使用するとクエリがはるかに高速になります(timemodified
列にインデックスがある場合)。
AND mdl_grade_grades.timemodified
BETWEEN unix_timestamp('2012-01-01 12:00')
AND unix_timestamp(now())
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加