使用LIKE';%对mySql结果进行排序变量%';
我的网站上有一个搜索表单,允许用户搜索公司的员工。我使用输入在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
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
你是在问你是否能按相关性排序吗?如果是这样的话,你可能想查看全文索引并与之匹配。谢谢你对全文索引的介绍。我只是花了一点时间读了一下。虽然下面的答案暂时有效,但从长远来看,这绝对是一个更好的解决方案。