SELECT *
FROM address
WHERE name LIKE 'a%' OR name LIKE '% a%' LIMIT 10
此查询以name
开头a
检索以'a%'
开头的'% a%'
个
或者在中间LIKE 'a%'
中的单词。如何从LIKE '% a%'
首先检索结果
那么{{1}}?。
答案 0 :(得分:3)
添加ORDER BY
子句,
SELECT *
FROM address
WHERE name LIKE 'a%' OR name LIKE '% a%'
ORDER BY CASE WHEN name LIKE 'a%' THEN 0 ELSE 1 END
LIMIT 10
答案 1 :(得分:0)
这是:
SELECT t1.*
FROM (
SELECT *
FROM address
WHERE name LIKE 'a%'
LIMIT 10
) t1
WHERE t1.name LIKE '% a%'
答案 2 :(得分:0)
一种方法是在查询中添加ORDER BY子句:
ORDER BY IF(name LIKE 'a%',1,2)
这样的事情:
SELECT *
FROM address
WHERE name LIKE 'a%' OR name LIKE '% a%'
ORDER BY IF(name LIKE 'a%',1,2)
LIMIT 10
要避免在大型集合上使用“文件排序”操作(即地址中的行数很多),并且如果您只想返回10行,通过将行数限制为更复杂的查询可能会表现得更好分类:
SELECT c.*
FROM ( SELECT a.*
FROM (
SELECT *
FROM address
WHERE name LIKE 'a%'
LIMIT 10
) a
UNION ALL
SELECT b.*
FROM address b
WHERE b.name LIKE '% a%' AND b.name NOT LIKE 'a%'
LIMIT 10
) c
ORDER BY c.name LIKE 'a%' DESC
LIMIT 10
答案 3 :(得分:0)
联合查询可能在这里有序。每个MySQL文档
要使UNION结果中的行由每个SELECT一个接一个地检索的行组成,请在每个SELECT中选择一个附加列作为排序列,并在最后一个SELECT后添加ORDER BY: / p>
(SELECT 1 AS sort_col, col1a, col1b, ... FROM t1)
UNION
(SELECT 2, col2a, col2b, ... FROM t2) ORDER BY sort_col;
所以对于你的情况就像
(Select *, 1 as sortcol from addresses where name like 'a%')
Union
(Select *, 2 as sortcol from addresses where name like '% a%')
Order by sortcol