SQL搜索标题字段与喜欢和定制订购

问题描述:

我有一个歌曲数据库,需要实施搜索。SQL搜索标题字段与喜欢和定制订购

我要产生结果的列表,列表的头是

like 'st%' 

,其余的结果是

like '%st%' 

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

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

我能够使用这种查询,还是我需要做另一种方式?

您可以在order by子句中使用case语句。下面是这样做的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将首先放置比赛。

顺便说一句,你不能取决于unionunion all后的排序。 SQL表本质上是无序的。除非使用order by子句(或MySQL中的group by子句)明确订购,否则SQL结果集本身是无序的。

您可以执行查询来搜索数据库中这些元素的相似度,并将它们分配给该变量,您可以使用相应的代码对它们进行分类。

+0

这很明显。我的问题是看看是否可以在sql查询中完成。 – Simon 2013-05-11 18:53:27