PHP:我的方法好吗?

时间:2010-10-05 15:08:52

标签: php mysql

我正在制作“最新用户”页面。

所有用户在“unixdate”列中都有一个时间戳,它会在您注册时存储。不知道这是否聪明,但我喜欢UNIX time()的有效性和简单性。

现在我通过这样做在24小时内向最新用户展示:

$long = "86400"; // 24 hours in seconds
$query = "SELECT * FROM users WHERE unixdate > time()-$long ORDER BY unixdate DESC";

这是一个很好的展示方法吗?如果我想在3天内展示最新版本,它会是* 3吗?

谢谢

4 个答案:

答案 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())
  • unixdate上的索引可能很有用
  • UNIX时间未定义超过2038年
  • 查询返回最近24小时内的最新用户,这可能与“在最后一天”(DST)不同,但如果您知道这种区别,则不是什么大问题。

$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字段上添加一个索引。