我希望表先對 LIKE 查詢結果進行排序,然后再對其他結果進行排序。- 已解決
例子: data = 'United States', 'New Zealand', 'South Korea'
詢問:
SELECT *
FROM table
WHERE data LIKE %Korea%;
輸出: 'South Korea'
預期輸出: 'South Korea', 'United States', 'New Zealand'
我研究了很多地方,不知何故 CHARINDEX 不起作用,LOCATE 也不起作用(僅顯示資料“韓國”)。資料庫服務器 - MySQL
uj5u.com熱心網友回復:
正如已經說過的,它比 PHP 更像是 SQL。然后,您需要所有行,因此 WHERE 會妨礙您。
我測驗的一種方法是:
SELECT *, INSTR(data, 'Korea') as weight
FROM table
ORDER BY weight = 0, weight;
這將首先按 'Korea' in 的存在data(如果不存在 'Korea'權重為零)排序,然后按 'Korea' 在 中的位置排序data。
使用LOCATE與INSTR相同,但引數相反:
SELECT data, LOCATE('Korea', data) as weight
FROM table
ORDER BY weight = 0, weight;
uj5u.com熱心網友回復:
將WHERE是制約回傳什么。看起來您希望將其全部退回,但以某種方式訂購。未測驗:
SELECT * FROM table
ORDER BY CASE WHEN data LIKE %Korea% THEN 1 ELSE 2
這也可能有效:
SELECT * FROM table
ORDER BY IF(data LIKE %Korea%, 1, 2)
對于兩者,當data包含時,Korea它在其他所有東西之前被排序。您可以添加, data然后對剩余的data升序或降序進行排序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/351128.html
標籤:mysql
上一篇:SQL中Exists的邏輯說明
下一篇:簡化和更正以下查詢
