2013-08-24 99 views
0

我不知道为什么它不工作......我想“排序依据”像这样一个创建的变量:我怎样才能ORDER BY变量?

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"); 
+1

那么,出了什么问题? “它不工作”太模糊,不能期待很多帮助。 – Hammerite

+0

阅读思想并不是我的超能力:) –

+0

对不起。当我这样做时,我收到了像mysql_fetch_array()这样的mysql错误:提供的参数不是有效的MySQL结果资源 – user2712783

回答

1

假设th变量$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计算列。

+0

哦它的工作正常现在..现在我学习越来越多的PHP ..感谢所有:DDD – user2712783

0

这是因为您正在使用在SELECT子句的相同级别上创建的WHERE子句中的ALIAS。有两种方法,使其工作,

一个,直接使用计算列的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操作顺序SELECT子句之前执行子句。这里是为了操作的列表:

  • FROM子句
  • WHERE子句
  • GROUP BY子句
  • HAVING子句
  • SELECT子句(在这里创建别名
  • ORDER BY子句