因此,在数据库中,我存储了乐器名称(以及其他各种属性)。假设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订单记录?
对我来说,尚不清楚您理想的排序顺序是什么,但是您可能应该在数据库表中添加一个额外的列。您说ORDER BY score_order太简单了,但是为什么不添加一个明确的score_order字段和顺序呢?
ORDER BY score_order
score_order