2013-08-24 101 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子句