使用LIKE';%对mySql结果进行排序变量%';

使用LIKE';%对mySql结果进行排序变量%';,mysql,sorting,Mysql,Sorting,我的网站上有一个搜索表单,允许用户搜索公司的员工。我使用输入在mySql数据库中搜索表。我的选择状态如下: SELECT title, uid FROM table_data WHERE title LIKE '%$search_name%' AND blog_id = 6 ORDER BY title ASC LIMIT 50 目前,搜索“Jon”会产生类似的结果: Angela Jones Dejonas Lucero Ernesto Jon Jon White Rick Jonsto

我的网站上有一个搜索表单,允许用户搜索公司的员工。我使用输入在mySql数据库中搜索表。我的选择状态如下:

SELECT title, uid FROM table_data 
WHERE title LIKE '%$search_name%' AND blog_id = 6 
ORDER BY title ASC LIMIT 50
目前,搜索“Jon”会产生类似的结果:

Angela Jones
Dejonas Lucero
Ernesto Jon
Jon White
Rick Jonston
有没有办法按这个顺序排序

search_name%
%search_name
%search_name%

Jon White
Ernesto Jon
Angela Jones
Dejonas Lucero
Rick Jonston

您将需要发出三个单独的查询并连接结果集。您可以在一个查询中执行此操作,如下所示:

SELECT '1' as q, title, ...  WHERE title LIKE '$search_name%' ...
UNION
SELECT '2' as q, title, ...  WHERE title LIKE '%$search_name' ...
UNION
SELECT '3' as q, title, ...  WHERE title LIKE '%$search_name%' ...
ORDER BY 1,2

这是一种方法,尽管我觉得不太优雅:

SELECT title, uid FROM table_data 
WHERE title LIKE '%$search_name%' AND blog_id = 6 
ORDER BY IF( title LIKE '$search_name%',0,
             IF( title LIKE '%$search_name', 1, 2 ) )
限制50

如果每个标题与“search_name%”匹配,则为每个标题分配一个“0”,如果与“%search_name%”匹配,则为每个标题分配1,否则为每个标题分配2(根据WHERE子句,该标题为“%search_name%”)

然后按它排序(升序)

您还可以使用
CASE WHEN..THEN..END
语句:

SELECT title, uid FROM table_data 
WHERE title LIKE '%$search_name%' AND blog_id = 6 
ORDER BY CASE WHEN title LIKE '$search_name%' THEN 0
              WHEN title LIKE '%$search_name' THEN 1
              ELSE 2
         END

你是在问你是否能按相关性排序吗?如果是这样的话,你可能想查看全文索引并与之匹配。谢谢你对全文索引的介绍。我只是花了一点时间读了一下。虽然下面的答案暂时有效,但从长远来看,这绝对是一个更好的解决方案。