【问题标题】:ORDER BY specified orderORDER BY 指定顺序
【发布时间】:2013-09-12 23:05:02
【问题描述】:

简化:

$q = mysql_query("SELECT * FROM mytable ORDER BY category") or die(mysql_error());
while($row = mysql_fetch_array($q)) {
    $cat = $row['category'];
    echo $cat."<br />";
}

mytable 持有苹果、香蕉、柑橘

我希望结果以特定顺序显示,例如香蕉、苹果、柑橘。

如何进行查询?

【问题讨论】:

  • 首先,停止使用mysql_任何东西。 php.net/manual/en/function.mysql-query.php大红框会解释原因。
  • 您的查询中已有 ORDER BY。您唯一可以添加的其他内容是 ASC 或 DESC。在文本字段上使用它时,字母数字是不言自明的。升序是最低到最高 (A-Z),降序是 (z-a)。
  • B,A,C 有意义吗?它不那么系统应该如何知道你想如何订购它?您可以使用 ORDER BY category DESC 或 ORDER BY category ASC,或者然后自己创建一些指定的顺序,但这并不容易,我认为您不是在要求它,不要使用 _fetch_array,而是使用 _fetch_assoc。
  • @Wiggler 我同意 fetch_assoc() 让它更清楚,但你知道 fetch_array() 做同样的事情吗? php.net/manual/en/function.mysql-fetch-array.php
  • mysql_* 函数不再维护,不应在任何新代码库中使用。它正在逐步淘汰,以支持更新的 API。相反,您应该将prepared statementsPDOMySQLi 一起使用。

标签: php mysql


【解决方案1】:

你可以使用order by field(...):

SELECT * FROM mytable ORDER BY FIELD(category, 'Banana', 'Apple', 'Citrus');

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_field - FIELD() 函数手册。

【讨论】:

    【解决方案2】:

    取自http://dev.mysql.com/doc/refman/5.0/en/sorting-rows.html的回复

    “如果您想明确指定返回 'order by' 的顺序,例如,如果您有一个优先级字段,其值为“低”、“高”或“中”......请执行以下操作:

    select * from tablename order by priority='High' DESC, priority='Medium' DESC, priority='Low" DESC;"
    

    对于你的情况,这将是:

    $q = mysql_query("SELECT * FROM mytable ORDER BY category='Banana' DESC, category='Apple' DESC, category='Citrus' DESC") or die(mysql_error());
    while($row = mysql_fetch_array($q)) {
    $cat = $row['category'];
    echo $cat."<br />";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2011-03-01
      • 2013-12-22
      • 1970-01-01
      • 2023-04-07
      • 2011-09-13
      • 1970-01-01
      相关资源
      最近更新 更多