@SET (SQL) in PHP


@SET (SQL) in PHP

如何设置SET @unix_four_weeks_ago = UNIX_TIMESTAMP(curdate()) - 2419200;

SQL

SET @unix_four_weeks_ago = UNIX_TIMESTAMP(curdate()) - 2419200;
SELECT id FROM USERS WHERE timemodified >= @unix_four_weeks_ago;
PHP

$result=$mysqli->query("SET @unix_four_weeks_ago = UNIX_TIMESTAMP(curdate()) -  2419200;SELECT id FROM USERS WHERE timemodified >= @unix_four_weeks_ago; ");

查询是关于获取最近4周的记录。查询在SQL中工作得很好,但当我运行php文件时没有给出任何输出。

mysqli_query()只允许一条语句。虽然可以使用mysqli_multi_query(),但也可以将查询重写为:

SELECT id
FROM (SELECT  @unix_four_weeks_ago := UNIX_TIMESTAMP(curdate()) - 2419200
     ) params CROSS JOIN
     USERS
WHERE timemodified >= @unix_four_weeks_ago;

可以直接在语句中设置值

正如其他人已经说过的,multi_query将允许您一次运行多个语句。然而,这个查询是相当复杂和难以阅读,你至少必须记录幻数2419200的含义。此外,由于DST的考虑,该查询对于包含DST切换事件的时间段并不完全正确。您还可以将此查询转换为

SELECT id from users where timemodified >= UNIX_TIMESTAMP(SUBDATE(curdate(), 28))

更容易读,并且使用了适当的日期时间计算,更正确。