从数据库获取上个月的数据

时间:2009-08-03 16:43:15

标签: mysql

我的查询目前获取昨天的数据,但我现在想获得所有上个月的数据。 (例如,从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所以我不知道从哪里开始!

5 个答案:

答案 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是本地DATEDATETIME字段,并且有索引而不是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)

这是the reference

答案 3 :(得分:0)

虽然混乱的答案会有效,但如果$tableenquiry_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."'
");