小编典典

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

sql

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

这使我可以仅通过查询“萨克斯管”来选择整个乐器系列,例如“高音萨克斯管”,“中音萨克斯管”等。

在该特定示例中,结果按其ID排序(您可以假定其为auto_incremented)。更理想的是按字母顺序排序,是吗?

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

这工作正常,但作为音乐人,他们喜欢耍着数据库管理员,不善待在长笛结果有“低音长笛”上面“笛”上市了,真的不善待具有“ “长笛2”之前列出的“长笛10”。

因此,看到没有东西ORDER BY score_order(那太容易了,不是吗……),我该如何引入某种订购系统来正确显示工具?

经过集思广益,我想到了一个解决方案:我可以再添加一列整数类型,并根据其重要性对乐器进行“排名”(即Piccolos将为“ 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订单记录?


阅读 215

收藏
2021-04-14

共1个答案

小编典典

对我来说,尚不清楚您理想的排序顺序是什么,但是您可能应该在数据库表中添加一个额外的列。您说ORDER BY score_order太简单了,但是为什么不添加一个明确的score_order字段和顺序呢?

2021-04-14