【问题标题】:Put the most popular option at first on a select box with mysql首先将最受欢迎的选项放在带有 mysql 的选择框上
【发布时间】:2009-11-21 13:27:44
【问题描述】:

我是 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>";
   }

但我想告诉 select 在顶部只放一个选项,最流行的选择,像这样:

<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 上执行此操作更好吗?还是使用循环?

谢谢!

【问题讨论】:

  • 作为一个发现“英国”被认为很受欢迎与其他美国放在一起并浪费时间在那里寻找它的人来说很烦人 - 请拜托:复制 热门选项在顶部,不要将它们移动那里。

标签: mysql html


【解决方案1】:

order by 人气如何?这不完全是你要求的,但它会简单得多,也许更合乎逻辑?

【讨论】:

  • 我的数据库有超过 5000 行。我只想要一次,只有一行,只是为了那个 id 55。这是添加“人气”列的最佳方式吗?这不会反映查询速度吗?
  • 添加一个名为 at_top 的布尔(位)列,并将其包含在您的订单中。
  • 另外,说明受欢迎程度的信息在另一个表中。客户表。我的大部分客户都来自同一个城市。
  • 你如何决定受欢迎程度? “最受欢迎”是否因客户或客户所在城市而异?
【解决方案2】:

您最好的选择是在 SQL 中执行此操作。不过,我们需要查看您的架构和当前的 SQL 以提供适当的帮助。值得注意的是,您可以按两列排序,例如

SELECT * FROM foo ORDER  BY col1,col2

【讨论】:

    【解决方案3】:

    如果您必须使用字母顺序,您可能必须将其拆分为两个查询,第一个查询仅获取该项目,第二个查询列出其余项目。

    我确信这会在线性时间内运行,并且排序不会更快(如果不是更慢的话)。

    【讨论】:

      【解决方案4】:

      这应该可行:

      (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 的元素移动到顶部。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-08
        • 1970-01-01
        • 2013-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多