我的查询目前获取昨天的数据,但我现在想获得所有上个月的数据。 (例如,从1日到31日)
$res = mysql_query("SELECT
FROM_UNIXTIME( enquiry_time ), `id` ,
`fullname` , `address1` , `citytown` ,
`postcode` , `telno` ,
`property_value` ,`total_secured_debt`
, `email` , `on_market` , `agent` ,
`reason` , `price_concession` ,
`asking_price` , `form_page` FROM
$table WHERE TO_DAYS(FROM_UNIXTIME( enquiry_time )) = (TO_DAYS(NOW())-1)
");
没有TO_MONTHS所以我不知道从哪里开始!
答案 0 :(得分:3)
尝试:
$res = mysql_query("
SELECT FROM_UNIXTIME(`enquiry_time`), `id`, `fullname`, `address1`,
`citytown`, `postcode`, `telno`, `property_value`, `total_secured_debt`,
`email`, `on_market`, `agent`, `reason`, `price_concession`,
`asking_price`, `form_page`
FROM $table
WHERE YEAR(FROM_UNIXTIME(`enquiry_time`)) = YEAR(CURDATE() - INTERVAL 1 MONTH)
AND MONTH(FROM_UNIXTIME(`enquiry_time`)) = MONTH(CURDATE() - INTERVAL 1 MONTH)
");
如果enquiry_time
是本地DATE
或DATETIME
字段,并且有索引而不是Unix时间戳,那么这一切都会更好,更快。
答案 1 :(得分:0)
寻找功能MONTH?
这会起作用(就像你现在所做的那样TO_DAYS
),但是请记住,如果表很大,你可能会付出沉重的性价:当WHERE条件取决于函数时,MySQL不能使用索引而不是直接在索引列上(使用EXPLAIN
查看查询计划并确认是这种情况)。在性能方面,你最好计算你想要看到的时间的下限和上限(在NOW()上使用函数和算术),然后在BETWEEN
中使用直接WHERE
。再次,使用EXPLAIN
进行双重检查 - 试图再次猜测MySQL的查询优化器是一个无效的练习,检查它计划做什么要容易得多; - )。
答案 2 :(得分:0)
您可以使用以下内容吗?我认为它会让你得到你想要的东西。
FROM_UNIXTIME(enquiry_time)
BETWEEN date_format(NOW() - INTERVAL 1 MONTH, '%Y-%m-01')
AND last_day(NOW() - INTERVAL 1 MONTH)
答案 3 :(得分:0)
虽然混乱的答案会有效,但如果$table
被enquiry_time
编入索引,
那么直接与该字段进行比较会比对它的函数更快。
这将他的答案转变为更加丑陋的人:
$res = mysql_query("
SELECT FROM_UNIXTIME(enquiry_time), id, fullname, address1,
citytown, postcode, telno, property_value, total_secured_debt,
email, on_market, agent, reason, price_concession, asking_price,
form_page
FROM $table
WHERE enquiry_time >= UNIX_TIMESTAMP(concat(year(curdate() - interval 1 month), '-', month(curdate() - interval 1 month), '-01'))
AND enquiry_time < UNIX_TIMESTAMP(concat(year(curdate()), '-', month(curdate()), '-01'))
");
答案 4 :(得分:0)
我发现你使用的是php,所以这可能比使用mysql函数更好:
$end_of_month = strtotime(date('Y-m-01 00:00:00'))-1;
$start_of_month = strtotime(date('Y-m-01 00:00:00',$end_of_month));
$res = mysql_query("SELECT
FROM_UNIXTIME( enquiry_time ), `id` ,
`fullname` , `address1` , `citytown` ,
`postcode` , `telno` ,
`property_value` ,`total_secured_debt`
, `email` , `on_market` , `agent` ,
`reason` , `price_concession` ,
`asking_price` , `form_page` FROM'
$table WHERE enquiry_time >= '".$start_of_month."' AND enquiry_time <= '".$end_of_month."'
");