我的问题记录存储在数据库中。问题列之一是ask_date
。
其中存储的示例是:1549923808
。
我要选择ask_date
在当前月份内的记录。
请问如何在SQL的WHERE
子句中计算该值?
//Select questions with the heighest or Top votes or answers this month( current month)
$SQL = "SELECT * FROM(
SELECT Q.*,
(SELECT COUNT(Q.question_id) FROM $questions_table Q ) num_of_rows,
(SELECT COUNT(v.vote_id) FROM $votes_table v WHERE Q.question_id=v.ask_id AND v.vote_type=0 ) votes_down,
(SELECT COUNT(a.answer_id) FROM $answers_table a WHERE question_id=a.ask_id ) total_answers,
(SELECT COUNT(v.vote_id) FROM $votes_table v WHERE Q.question_id=v.ask_id ) votes_up,
CONCAT(m.firstname,' ',m.lastname) author_name,
m.username u_name FROM $questions_table Q
LEFT JOIN $main_table m ON Q.user_id=m.user_id
WHERE ............
) A LEFT JOIN $votes_table V ON A.question_id=V.ask_id
GROUP BY A.question_id ORDER BY (
SELECT COUNT(V.vote_id) vote
FROM $votes_table V
WHERE V.ask_id=A.question_id
) DESC LIMIT {$maxPageRecords} OFFSET {$offset}";
答案 0 :(得分:3)
一种简单的方法是:
where date_format(from_unixtime(ask_date), '%Y-%m') = date_format(now(), '%Y-%m')
但是,这排除了索引的使用。因此,这可能会更好:
where ask_date >= unix_timestamp(date(concat_ws('-', year(now()), month(now()), 1)))) and
ask_date < unix_timestamp(date(concat_ws('-', year(now()), month(now()), 1))) + interval 1 month)
答案 1 :(得分:1)
选择
ask_date
在当月内的记录:
这个简单(和索引友好)的表达式应该可以完成工作:
WHERE ask_date >= UNIX_TIMESTAMP(DATE_FORMAT(NOW(), '%Y-%m-01'))
答案 2 :(得分:0)
使用SQL元组:
WHERE (year(ask_date),month(ask_date)) = (year(now()),month(now()))