按关键字排序列

时间:2011-05-19 09:30:47

标签: php sql

我有一个充满记录的数据库,并使用这个MySQL语法:

 public static function allfood($db) {
    $sql = "SELECT DISTINCT sort, sortname FROM tblDishes WHERE foodanddrinks = 'e'";
    $result = $db->listing($sql);
    return $result;
  }

我按字母顺序排列所有结果。但我想确定自己的订单。例如,Rabbit应显示在Apple之前。是否有SQL语法允许我组织自己的显示顺序?

修改
这在我的dbconnections.php文件中说明。

public function listing($sql) {
    $result = mysql_query($sql, $this->_connection);
    while($row=mysql_fetch_array($result)) {
      $return[] = $row;
    }
    return $return;
  }

这是我尝试过的,但我在dbconnections.php文件

中收到错误
public static function allfood($db) {
        $sql = "SELECT DISTINCT sort, sortname FROM tblDishes WHERE foodanddrinks = 'e' order by case sortname 
        when 'Rabbit' then smth1
        when 'Apple' then smth2
        when 'Fish' then smth3
        when 'Pasta' then smth4
        when 'Snacks' then smth5";
        $result = $db->listing($sql);
        return $result;
      }

4 个答案:

答案 0 :(得分:3)

您可以通过向名为DisplayOrder的表中添加另一列,然后按其对表进行排序来完成此操作。

答案 1 :(得分:1)

这可能会对您有所帮助:

SELECT * FROM tblDishes WHERE foodanddrinks = 'e'
order by case field_name
when 'Rabbit' then smth1
when 'Apple' then smth2
...
else smth666 
end

答案 2 :(得分:0)

首先,您没有对发布的代码段中的数据进行排序。如果您想要一个反向的字母顺序,只需使用:

public static function allfood($db) {
  $sql = "SELECT * FROM tblDishes WHERE foodanddrinks = 'e' ORDER BY foodanddrinks DESC";
  $result = $db->listing($sql);
  return $result;
}

编辑:这也值得您光顾。 http://imthi.com/blog/programming/mysql-order-by-field-custom-field-sorting.php

答案 3 :(得分:0)

这有点开销,但它应该有用。

如果您有一个包含关键字和数字优先级的单独表,则可以在查询中向该表添加联接,然后按优先级列排序。

如果您只有十个固定关键字,那么您可能希望逐个使用,就像其他受访者建议的那样。如果您有许多关键字,或者动态更新或具有任何显着频率的列表,您可能需要考虑优先级查找表。

此外,如果关键字有很多重复,您可能还是想考虑将它们标准化到自己的表格中,优先级为字段。