2

mysql-db で ajax-search を使用しています。例: 私が照会する「man」を検索します。

SELECT id FROM table WHERE name LIKE '%man%;

結果を並べ替えて、検索で始まるすべての結果をアルファベット順に並べたいと思います。

man
mankind

その後、次のように、すべての結果の幅をアルファベット順に検索 INSIDE にしたいと考えています。

iron man
woman

どうやってやるの?

4

3 に答える 3

6

文字列内の検索語の位置で並べ替えることができます。

SELECT id 
FROM table 
WHERE name LIKE '%man%'
ORDER BY INSTR(name, 'man'), name

も参照してください:INSTR()LOCATE()

文字列の先頭またはその他の場所のみを区別するように式を変更することもできます。

ORDER BY IF(INSTR(name, 'man'), 1, 0)
于 2012-11-15T14:39:17.767 に答える
2

サブストリングを検証するために、ORDER BYusingステートメントを作成できます。CASE注:UPPER()ここでは、大文字と小文字を区別しない一致のために、検索値と列値の両方を大文字に変換するために使用しています。それが必要でない場合は、を削除してくださいUPPER()

ORDER BY
  CASE 
    /* Matches the start of the string */
    WHEN UPPER(LEFT(name, 3)) = 'MAN' THEN 1
    /* Doesn't match the end or the start (in the middle) */
    WHEN UPPER(RIGHT(name, 3)) <> 'MAN' THEN 2
    /* Matches the end of the string */
    WHEN UPPER(RIGHT(name, 3)) = 'MAN' THEN 3
    ELSE 4
  END,
  /* Then order by the name column */
  name

INSTR()この方法はかなり移植性が高いはずですが、私は以下の答えの方が好きです。

于 2012-11-15T14:38:13.940 に答える
1

これを試して

SELECT id FROM table WHERE name LIKE 'man%';
UNION
SELECT id FROM table WHERE name LIKE '%man%';
于 2012-11-15T14:38:38.463 に答える