php - 按任意顺序对 SQL 行输出进行排序?

标签 php mysql sql sorting

因此,在我的数据库中,我存储了乐器名称(以及各种其他属性)。假设 id 是主键,name 是唯一键。

在 PHP 脚本中,我按仪器类别选择项目,如下所示:

$name = mysql_real_escape_string($_POST['name']);
$row = mysql_fetch_row(mysql_query("SELECT * FROM `instruments` WHERE name LIKE '%$name%' ORDER BY id"));

结果表:

id    name
1     "Flute 2"
2     "Bass Flute"
3     "Flute 10"
4     "Flute 7"

这让我可以通过查询“Saxophone”来选择整个乐器系列,例如“Soprano Saxophone”、“Alto Saxophone”等。

在那个特定的例子中,结果按它们的 id 排序(你可以假设它是 auto_incremented)。更理想的是按字母顺序排序,是吗?

id    name
2     "Bass Flute"
3     "Flute 10"
1     "Flute 2"
4     "Flute 7"

这很好用,但作为音乐家,他们喜欢和数据库管理员混在一起,并且不喜欢在长笛结果中将“低音长笛”列在“长笛”上方,真的 不要善意地将“Flute 10”列在“Flute 2”之前。

所以,既然没有 ORDER BY score_order(那太简单了,不是吗……),我该如何引入某种排序系统来正确显示仪器?

经过集思广益,我想到了一个解决方案: 我可以再添加一个整数类型的列,并根据它们的重要性对乐器进行“排序”(即短笛为“1”,长笛为“2”等):

... nts` WHERE name LIKE '%$name%' ORDER BY rank, name"));

id    name           rank
3     "Flute 10"     2
1     "Flute 2"      2
4     "Flute 7"      2
2     "Bass Flute"   5

但是,这并没有说明“Flute 10”在“Flute 2”之前出现的事实,字母数字

理想的结果表(先按rank排序,再按name排序):

id    name           rank
6     "Piccolo"      1
1     "Flute 2"      2
4     "Flute 7"      2
3     "Flute 10"     2
5     "Alto Flute"   4
2     "Bass Flute"   5

有没有办法通过分析整个数字而不是逐个数字来获得SQL订单记录?

最佳答案

您可以创建一个不同的订单来做这样的事情。这是一个黑客。

select * from table
order by (
     case name
     when 'Health' then 0 
     when 'Flute 10' then 1
     when 'Freeze' then 2
     when 'Bass Flute' then 3
     end
)

使用 id 列可能是更好的主意。

select * from table
order by (
    case id
    when 3 then 0 
    when 1 then 1
    when 4 then 2
    when 2 then 3
    end
)

关于php - 按任意顺序对 SQL 行输出进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2210821/

相关文章:

php - 通过 phpMyAdmin 更改表中的 URL

mysql - Java 中的 SQL;处理 SELECT 和 GROUP BY 时出错

sql - 使用 random() 的子查询中集合返回函数的不一致行为

php - 通过 php 计算行数比 SQL 中的 COUNT 更快?

php - 是否可以限制在 PHP 中调用方法的方式?

javascript - backbone js 对我的联系人列表进行排序

php - 在更改其位置的 div 框中包含 php

没有 header 的 PHP Soap 基本授权

php - 使用 PHP 搜索存储在 mySql 列中的数组的最快方法

mysql - 重用 phpbb 连接向 mysql 添加一条记录