我有一个小问题。
我的表格如下:
tbl_groups
id (int) | teacher_id (int) | student_ids (text)
------------------------------------------------
1 | 14 | 2015,2016,2017
2 | 35 | 15,16,17
3 | 14 | 631
student_ids
将使用 implode()
由 PHP 数组填充。
但是,当我执行以下查询以通过学生 ID 搜索组 ID 时:
SELECT `id` FROM `tbl_groups` WHERE `student_ids` LIKE '%15%'
我返回了第 1 行和第 2 行。发生这种情况是因为 student_ids
将搜索“15”,而“2015”包含“15”,因此它也会返回它。
我怎样才能避免这种情况?
您可以像这样使用 FIND_in_SET:。如果它在集合中,它将返回一个 > 0 的值。
SELECT `id` FROM `tbl_groups`
WHERE FIND_IN_SET('15',`student_ids`);
样本
mysql> SELECT FIND_IN_SET('15','15,16,17');
+------------------------------+
| FIND_IN_SET('15','15,16,17') |
+------------------------------+
| 1 |
+------------------------------+
1 row in set (0,00 sec)
mysql> SELECT FIND_IN_SET('1','15,16,17');
+-----------------------------+
| FIND_IN_SET('1','15,16,17') |
+-----------------------------+
| 0 |
+-----------------------------+
1 row in set (0,00 sec)
mysql> SELECT FIND_IN_SET('17','15,16,17');
+------------------------------+
| FIND_IN_SET('17','15,16,17') |
+------------------------------+
| 3 |
+------------------------------+
1 row in set (0,00 sec)
mysql>
我是一名优秀的程序员,十分优秀!