0

我有一个歌曲数据库,需要实现搜索。

我想生成一个结果列表,其中列表的开头是

like 'st%'

剩下的就是

like '%st%'

如果我使用 UNION 它将正确生成一个没有重复的列表,但不是我想要的顺序。

如果我使用 UNION ALL,它将按照我想要的顺序生成列表,但有重复。

我可以使用这种查询,还是需要另一种方式?

4

2 回答 2

1

您可以在子句中使用 case 语句order by。这是执行此操作的 SQL 标准方法:

select *
from songs
where song like '%st%'
order by (case when song like 'st%' then 1 else 0 end) desc,
         song

在 MySQL 中,您可以只使用以下表达式:

order by (song like 'st%') desc, song

因为布尔表达式的计算结果为 0(假)或 1(真)。desc将把比赛放在第一位。

顺便说一句,您不能依赖 aunion或之后的排序union all。SQL 表本质上是无序的。SQL 结果集本质上是无序的,除非使用order by子句(或group byMySQL 中的子句)显式排序。

于 2013-05-11T19:34:26.357 回答
0

您可以执行查询以在数据库中搜索这些元素的相似性,并将它们分配给变量,然后您可以使用适当的代码对它们进行排序。

于 2013-05-11T18:38:45.220 回答