使用喜欢和自定义排序在标题字段上进行 SQL 搜索

Posted

技术标签:

【中文标题】使用喜欢和自定义排序在标题字段上进行 SQL 搜索【英文标题】:SQL search on title field with like and custom ordering 【发布时间】:2013-05-11 18:36:55 【问题描述】:

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

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

like 'st%'

剩下的就是

like '%st%'

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

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

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

【问题讨论】:

【参考方案1】:

您可以在 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 表本质上是无序的。 SQL 结果集本质上是无序的,除非使用 order by 子句(或 MySQL 中的 group by 子句)显式排序。

【讨论】:

【参考方案2】:

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

【讨论】:

这很明显。我的问题是看看这是否可以在 sql 查询中完成。

以上是关于使用喜欢和自定义排序在标题字段上进行 SQL 搜索的主要内容,如果未能解决你的问题,请参考以下文章

使 UISearchBar 在两个不同的字段上进行搜索

Drupal 6 中的自定义搜索表单:视图/面板还是自定义 sql?

如何在 Visual Basic 6 ListView 上进行多列排序?

PostgreSQL 中的高效全文搜索,在另一列上排序

Solr的查询结果去重

使用3个字母的单词在mysql上进行全文搜索