我正在制作“最新用户”页面。
所有用户在“unixdate”列中都有一个时间戳,它会在您注册时存储。不知道这是否聪明,但我喜欢UNIX time()的有效性和简单性。
现在我通过这样做在24小时内向最新用户展示:
$long = "86400"; // 24 hours in seconds
$query = "SELECT * FROM users WHERE unixdate > time()-$long ORDER BY unixdate DESC";
这是一个很好的展示方法吗?如果我想在3天内展示最新版本,它会是* 3吗?
谢谢
答案 0 :(得分:3)
你的方法看起来很好。您可能只想选择要使用的字段,尤其是当您将它们作为非关联数组访问时。如果数据库架构稍后更改,则会发生意外。还要确保列unixdate上有一个索引。
答案 1 :(得分:0)
我唯一要改变的是变量的名称/类型。
$seconds_in_day = 86400;
$query = "SELECT * FROM users WHERE unixdate > time()-$seconds_in_day ORDER BY unixdate DESC";
现在,当有人读取您的代码时,他们将确切知道该变量的作用。 “长”没有任何帮助。也没有必要使它成为一个字符串,使它成为一个整数。
如果您要进行多次查询,我还会更改查询变量名称。我也更喜欢sprintf,我认为它使代码更具可读性
$seconds_in_day = 86400;
$query_new_members_1day = sprintf( "SELECT * FROM users WHERE unixdate > time()-%d ORDER BY unixdate DESC", $seconds_in_day );
$query_new_members_3days = sprintf( "SELECT * FROM users WHERE unixdate > time()-%d ORDER BY unixdate DESC", $seconds_in_day*3 );
答案 2 :(得分:0)
没关系。一些小事:
SELECT *
,只选择您想要的列time()-$long
作为常量传递(为了更有效的查询 - 每行重新评估TIME())
$yesterday = time() - 86400;
$query = "SELECT somecolumn1,somecolumn2,othercolumn FROM users
WHERE unixdate > $yesterday ORDER BY unixdate DESC";
答案 3 :(得分:-2)
我也总是以Unix时间戳格式存储日期。我发现在PHP中工作很容易。
你应该使用
$long = time() - 86400;
我更喜欢
$long = time() - 259200;
超过3 * 86400,因为它可以节省一些CPU周期。
我还会在unixdate字段上添加一个索引。