我有一個mysql-db上的ajax搜索。例如:搜索「男人」我與查詢:ORDER BY字開頭或內部字段
SELECT id FROM table WHERE name LIKE '%man%;
我現在要排序的結果有開始按字母順序搜索的所有結果:在那之後我想
man
mankind
所有結果都按照字母順序搜索INSIDE,如:
iron man
woman
我該怎麼做?
我有一個mysql-db上的ajax搜索。例如:搜索「男人」我與查詢:ORDER BY字開頭或內部字段
SELECT id FROM table WHERE name LIKE '%man%;
我現在要排序的結果有開始按字母順序搜索的所有結果:在那之後我想
man
mankind
所有結果都按照字母順序搜索INSIDE,如:
iron man
woman
我該怎麼做?
您可以使用CASE
語句構造您的ORDER BY
以驗證子字符串。注意:這裏我使用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()
答案。
試試這個
SELECT id FROM table WHERE name LIKE 'man%';
UNION
SELECT id FROM table WHERE name LIKE '%man%';
我一開始也以爲是同一件事......但是當你命令......它是由工會返回的整個集合......所以同樣的問題 - 這不會返回重複...作爲UNION刪除重複... UNION ALL將返回重複 – mckeejm
+1比我的CASE更簡單。 –