2 回答

TA貢獻1797條經驗 獲得超4個贊
首先INSTR(str, substr)是返回substr在str中的位置,若不存在,則返回0。select * from list ORDER BY INSTR('4,2,3,1',lid);
使用ORDER BY INSTR時,如果lid不存在'4,2,3,1'中,則返回0,order by默認按遞增排序,所以lid為4,2,3,1的會放到最后。SELECT * FROM EVENT WHERE eventId IN(443,419,431,440,420,414,509) ORDER BY INSTR(',443,419,431,440,420,414,509,',CONCAT(',',eventId,','))
mysql> select INSTR(',443,419,431,440,420,414,509,',CONCAT(',',443,','));
+------------------------------------------------------------+
| INSTR(',443,419,431,440,420,414,509,',CONCAT(',',443,',')) |
+------------------------------------------------------------+
| 1 |
+------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select INSTR(',443,419,431,440,420,414,509,',CONCAT(',',419,','));
+------------------------------------------------------------+
| INSTR(',443,419,431,440,420,414,509,',CONCAT(',',419,',')) |
+------------------------------------------------------------+
| 5 |
+------------------------------------------------------------+

TA貢獻1836條經驗 獲得超13個贊
order by只是一個子句,instr是一個內部函數,用在你所列舉的例子中完全是作為order by子句的clause,語法上就是這么定義的,如果clause是表達式,先計算表達式,再根據表達式結果來執行order by.
- 2 回答
- 0 關注
- 226 瀏覽
添加回答
舉報