2009-11-21 75 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的元素移动到顶部。