使用like和custom排序对标题字段进行SQL搜索

时间:2013-05-11 18:36:55

标签: mysql sqlite union union-all

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

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

的结果
like 'st%'

其余是

的结果
like '%st%'

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

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

我可以使用这种查询,还是需要以其他方式进行?

2 个答案:

答案 0 :(得分:1)

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

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(false)或1(true)。 desc会将匹配放在首位。

顺便说一句, CAN 依赖于unionunion all后的排序。 SQL表本质上是无序的。除非使用order by子句(或MySQL中的group by子句显式排序),否则SQL结果集本质上是无序的。

答案 1 :(得分:0)

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