2009-11-21 78 views
0

我對MySQL的新的,但我有一些數據,按名稱排序數據庫:把最流行的選擇首先要在選擇框與MySQL

<option value="4"> George </option> 
<option value="55"> John </option> 
<option value="13"> Paul </option> 
<option value="24"> Ringo </option> 

我希望把這個上選擇,是這樣的:

while($row = mysql_fetch_array($result)){ 
     echo "<option value='".$row['id']."'>".$row['name']."</option>"; 
    } 

但我想告訴選擇把只有一個選項在頂部,最流行的選擇,像這樣:

<option value="55"> John (most popular)</option> 
<option value="4"> George </option> 
<option value="13"> Paul </option> 
<option value="24"> Ringo </option> 

我如何排除一行?我必須使用mysql_fetch_array?

最好在SQL上做到這一點?或者使用循環?

謝謝!

+1

作爲一個人發現它很討厭發現「英國」被認爲是受歡迎的與其他我們放在一起,並浪費時間在那裏尋找它 - 請請請:**複製**您的流行選項在頂部,不要**移動他們在那裏。 – Quentin 2009-11-21 20:07:23

回答

0

order by如何受歡迎?這不完全是你要求的,但它會更簡單,也許更合乎邏輯?

+0

我的db有超過5000行。我只需要一次,只需要一行,只需要55就可以了。這是添加「流行度」列的最佳方式嗎?這不會反映在查詢速度? – ookla 2009-11-21 13:39:57

+0

添加名爲at_top的布爾(位)列,並在您的訂單中包含該列。 – 2009-11-21 13:42:34

+0

另外,在另一個表格中講述的是受歡迎程度。客戶表。我的大部分客戶將來自同一個城市。 – ookla 2009-11-21 13:42:54

0

你最好的選擇是在SQL中這樣做。我們需要看到你的模式和你當前的SQL來幫助你。值得注意的是,您可以按兩列排序,例如

SELECT * FROM foo ORDER BY col1,col2 
0

如果你必須使用字母順序,你可能需要將它拆分成兩個查詢,第一個查詢只拿到了那個項目,和第二列出他人休息。

我確定這是在線性時間運行,排序運行速度不會更快(如果不是更慢)。

0

這應該工作:

(SELECT id, name||' (most popular)' AS name FROM table ORDER BY id DESC LIMIT 1) 
UNION DISTINCT 
(SELECT id, name FROM table) 

運行查詢,然後將其渲染成HTML。 另一種方法是在呈現HTML之後使用JavaScript將具有最高ID的元素移動到頂部。