2012-05-01 53 views
0

長話短說,我的按字段順序似乎不適用於我的MySQL調用。我真的不能找到一個模式在存儲...「按字段排序」MySQL似乎沒有工作

$ theorder正確設置爲

, 'People-Wedding Photo', 'People-Kids', 'People-Male/Female', 'Architecture-Exterior', 'Architecture-Interior', 'Animal-Birds', 'Backgrounds' 

這裏是我的代碼。正如你所看到的,我循環,做我的格式轉換....但我仍然得到一個錯誤的訂單...隨機訂單...

有什麼我失蹤?

$under_link_query = mysql_query("SELECT DISTINCT(type), type FROM ".$prefix."ProFolio_work WHERE type != 'Backgrounds' ORDER BY FIELD(type" . $theorder .")"); 


    while($u_row = mysql_fetch_assoc($under_link_query)){ 
     $type = html_entity_decode($u_row['type']); 

     $typeForm = preg_replace('/[^a-z0-9]/i', '_', $type); 
     ?> 
      <a href="#" id="link_<? echo str_replace(' ', '_', $typeForm); ?>"> 
    <? echo ucfirst($type); ?></a> 
      <? 
+0

什麼是變量$ theorder,它在哪裏設置正確?我很困惑。第一位是你想要的順序嗎?爲什麼不做類似SELECT ... FROM ... ORDER BY的類型DESC或ASC,取決於你想要的方式? – thatidiotguy

+0

正確的語法iirc是'ORDER BY $ fieldname',您應該默認進行清理。此外,'ORDER BY'將根據該字段進行排序......但根據db設置的優先級進行排序。數字排序比聯想排序更可預測。我的建議是採取數據和使用PHP操縱它到你想要使用的格式。 – Malovich

+2

它被稱爲「ORDER BY FIELD」,您可以在其中手動指定要顯示的訂單結果。 http://www.cfdan.com/posts/Handy_MySQL_-_ORDER_BY_FIELD.cfm – PaulHanak

回答

2

@Malovich是到答案,基本上你應該使用:

ORDER BY $theorder 

但是請記住,默認的排序是升序和順序依次發生。我注意到你的變量$theorder被設置爲一個以逗號開頭的字符串,這幾乎是你的問題。

請確保$theorder不以逗號開頭,然後嘗試只按一行排序。如果有效,繼續添加更多。

===============編輯=================

道歉,你想子排序一個字段。錯過了這一部分,所以這裏是怎麼回事:

你需要提供所有的字段進行排序,或MySQL將排序你沒有提供的每個領域,然後它將排序你提供的領域。如果你願意,你可以提供一個子集場訂購的,但你需要爲他們提供以相反的順序,然後使用DESC符號,如:

ORDER BY FIELD (field,'lastsort',middlesort','firstsort') desc 

這顯示在下面的列表訂單:

firstsort items 
middlesort items 
lastsort items 
<all other options, in reverse alphabetical order> items 

這個關鍵部分是您需要添加所有字段值進行排序。 (或使用解決方法)。

+0

是的,$ theorder是一個以逗號開頭的字符串。如果您查看語法,當您按字段使用順序時,必須指定字段......因此,它等同於ORDER BY FIELD(類型,「字段名稱1」,「字段名稱2」)等。但是你說你可以通過說「按字段名稱1','字段名稱2'等等來指定MANUAL命令的順序......它似乎不適合我...我不斷地收到語法錯誤.. – PaulHanak

+1

'ORDER BY FIELD'更改該字段中值的順序順序。一個簡單的例子是向後排序'id'代碼:'ORDER BY FIELD(id,'E','D','C','B','A')'。它沒有指定多個字段進行排序。 –

+0

在MySQL命令中,通過支持多個訂單列給出一個如下所示的表: id | name1 | name2 | name3 ORDER BY ID DESC,name1,name3,name2 將按ID排序(由於DESC(降序)從最大到最小),然後按名稱1,然後按名稱3,然後按名稱2。鑑於該ID可能是唯一的,接下來的3列將被忽略。但是,如果使用排序方式: ORDER BY name1 desc,name2 任何時候,name1中的值都會被複制,它將按name2對這些數據進行分類。 http://dev.mysql.com/doc/refman/5.0/zh/order-by-optimization.html – MaddHacker