0
   SELECT *
   FROM address 
   WHERE name LIKE 'a%' OR name LIKE '% a%' LIMIT 10

このクエリは、先頭 または途中の単語で name始まる を取得します。最初から結果を取得するにはどうすればよい ですか?a'a%'
'% a%'LIKE 'a%'
LIKE '% a%'

4

4 に答える 4

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
于 2013-04-16T03:21:22.147 に答える
0

ここにあります:

SELECT t1.*
FROM (
   SELECT *
   FROM address 
   WHERE name LIKE 'a%'
   LIMIT 10
) t1
WHERE t1.name LIKE '% a%' 
于 2013-04-16T03:21:20.197 に答える
0

1 つの方法は、クエリに 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
于 2013-04-16T03:21:57.007 に答える