gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:46:48 25 4
gpt4 key购买 nike

因此,在我的数据库中,我存储了乐器名称(以及各种其他属性)。假设 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com