MySQL函数FIELD语法定义如下:

  • 语法:FIELD(str, str1, str2, str3, ...)
  • 解释:返回 str1,str2,str3,... 列表中str的索引(位置)。 如果未找到str,则返回0。如果FIELD()的所有参数都是字符串,则所有参数都将作为字符串进行比较。如果所有参数都是数字,则将它们作为数字进行比较。 否则,参数将进行两次比较。如果str为NULL,则返回值为0,因为NULL无法与任何值进行相等性比较。FIELD()和ELT()互补。

应用举例如下:

mysql> SELECT FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff') AS result;
+--------+
| result |
+--------+
|      2 |
+--------+

mysql> SELECT FIELD('Gg', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff') AS result;
+--------+
| result |
+--------+
|      0 |
+--------+

mysql> SELECT FIELD(25, 12, 18, 23, 24, 25, 30) AS result;
+--------+
| result |
+--------+
|      5 |
+--------+

巧妙运用FIELD(),可以给IN()匹配结果进行排序,优先匹配的排在前面,例如:

mysql> SELECT * FROM tb_options WHERE id IN(15, 8, 16, 10) ORDER BY FIELD(id, 15, 8, 16, 10);
+------+-----------------+
|  id  | name            |
+------+-----------------+
|  15  | mailserver_pass |
|   8  | use_smilies     |
|  16  | mailserver_port |
|  10  | comments_notify |
+------+-----------------+