我有一个充满记录的数据库,并使用这个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;
}
答案 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)
这有点开销,但它应该有用。
如果您有一个包含关键字和数字优先级的单独表,则可以在查询中向该表添加联接,然后按优先级列排序。
如果您只有十个固定关键字,那么您可能希望逐个使用,就像其他受访者建议的那样。如果您有许多关键字,或者动态更新或具有任何显着频率的列表,您可能需要考虑优先级查找表。
此外,如果关键字有很多重复,您可能还是想考虑将它们标准化到自己的表格中,优先级为字段。