我怎样才能对变量进行排序?

时间:2013-08-24 15:21:04

标签: php mysql date

我不知道为什么它不能正常工作......我试图通过"像这样创建的变量:

mysql_query("SELECT *,DATE_FORMAT(FROM_UNIXTIME(banfrom), '%d/%m/%Y') as time FROM ab_list WHERE time = '24/08/2013' ORDER BY banfrom DESC LIMIT 0,50");

或者,

   $hr = date('d/m/Y');
   mysql_query("SELECT *,DATE_FORMAT(FROM_UNIXTIME(banfrom), '%d/%m/%Y') as time FROM       ab_list WHERE time = '$hr' ORDER BY banfrom DESC LIMIT 0,50");

2 个答案:

答案 0 :(得分:1)

假设变量$hr的格式为%d/%m/%Y,您可以使用having代替where来过滤记录。

mysql_query("SELECT *,DATE_FORMAT(FROM_UNIXTIME(banfrom), '%d/%m/%Y') as time 
             FROM ab_list 
             HAVING time = '$hr' 
             ORDER BY banfrom DESC 
             LIMIT 0,50");

在这种情况下使用HAVING而非WHERE的原因是因为time是计算列。

答案 1 :(得分:0)

这是因为您在ALIAS子句的同一级别创建的WHERE子句中使用了SELECT。有两种方法可以使它工作,

一个,直接在WHERE子句中使用计算列

WHERE DATE_FORMAT(FROM_UNIXTIME(banfrom), '%d/%m/%Y') = '24/08/2013'

第二次,使用子查询

SELECT a.*
FROM   (put your whole query here) a
WHERE  a.time = '24/08/2013'

WHERE无法使用ALIAS,因为在 SQL操作顺序中,WHERE子句在SELECT子句之前执行。以下是操作顺序列表:

  • FROM clause
  • WHERE子句
  • GROUP BY子句
  • HAVING条款
  • SELECT子句(别名在此处创建
  • ORDER BY子句