2012-10-06 50 views
-2

我使用ORDER BY在MySQL SELECT查詢,但我不知道OTS未訂購數據..如果我使用此查詢的顯示錶,但按升序排序沒有數據錯誤在查詢語法

$result = mysql_query("SELECT *FROM learningmaterial ORDER BY 'order' ASC")or die(mysql_error()); 

但如果我使用

$result = mysql_query("SELECT *FROM learningmaterial ORDER BY order ASC")or die(mysql_error()); 

然後它給錯誤的查詢語法是不正確的......我見過各種網站上,但我couldnot發現任何獨特的在我的代碼...我認爲它對,請檢查查詢並修復解決方案。 Thankx提前:)

+1

大家都在說,把訂單換成別的名字。這是一個保留字 – FirmView

+1

請記住,表格可能不在查詢它的人的控制之下。是的,使用未保留的列名是個好主意,但如果涉及與DBA進行爲期3周的爭奪,或者更改爲已查詢「訂單」列的其他42個程序,則不是。 – paxdiablo

+0

@paxdiablo好點,但是,如果DBA或任何其他人正在使用關鍵字命名列,我將爭取整個生命 – FirmView

回答

3

你需要反引號,不是單引號(一)

... SELECT * FROM learningmaterial ORDER BY `order` ASC ... 

通過由常數(每行使用單引號,你訂購的行得到相同的常數),所以根本沒有排序它們。

通過使用「裸」列名稱order,您混淆了SQL解析器,因爲order是保留字。


(一):當然,這個問題解決了,如果你停止使用保留字作爲列名,但我認爲你這樣做是有原因的(例如程序的水桶負荷已經取決於該列被稱爲order的事實)。

我自己,我傾向於不使用的列(如orderdate)的通用名稱,而寧願事情,不與語言(如order_numstart_date)發生衝突。這樣我就不必擔心逃跑了。

+0

backticks:'「SELECT * FROM learningmaterial ORDER BY \'order \'ASC」';也「mot」=>「不」 –

+0

也可能是一個好主意,不要使用保留字作爲列名。 – Cyclonecode

1

您正在使用SQL保留關鍵字order作爲列名,以便使用反單引號逃脫......這樣

SELECT * FROM learningmaterial ORDER BY `order` ASC 

我會建議你改變columnn名

參考For List Of Reserved Keywords

+0

任何人都請告訴我,我即時得到這個問題的負面觀點..我knw即時通訊不是一個很好的編碼器..但我是一個初學者..請告訴我如何得到upvotes在這個問題上,thanx :) –

1

ORDER是一個保留的sql語法關鍵字。你不能在第二種情況下

SELECT *FROM learningmaterial ORDER BY order ASC 
---------------------------------^-------^-- 
//this is a sql error 

它沒有任何意義,直接

SELECT *FROM learningmaterial ORDER BY `order` ASC 
-------------------------------^--------- 

使用它。

+0

在什麼意義上沒有任何意義?它確實是有道理的,它只是他丟失的背部剔號 –

+0

@ Mr.Alien:「*在第二種情況下......它沒有任何意義*」。 – eggyal

+0

@eggyal但是這個查詢確實有意義 –

1

由於Order是一個保留字,因此您需要使用反引號來包裝它們而不是單引號。

SELECT * FROM `learningmaterial` ORDER BY `order` ASC 
+5

難道你不只是重複什麼所有早期的答案說? – Barmar

+0

+1種......我沒看他們...... :( –

+0

Thaaanxxx Awlll .....我只是一個初學者..但我應該知道這些事情..我不知道它只是滑出我的腦海中......任何方式thnx很多:) –