因此,在我的数据库中,我存储乐器名称(以及各种其他属性)。比方说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 排序(您可以假设它是自动递增的)。更理想的是按字母顺序排序,是吗?
id name
2 "Bass Flute"
3 "Flute 10"
1 "Flute 2"
4 "Flute 7"
这很好用,但作为音乐家,他们喜欢与数据库管理员搞混,并且不喜欢在长笛结果中将“低音长笛”列在“长笛”上方,并且really请勿将“Fute 10”列在“Fute 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
然而,这并没有考虑到“长笛 10”出现在“长笛 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 订单记录?