mysql> select * from test; +----+------+ | id | name | +----+------+ | 1 | 张三 | | 2 | 李四 | | 3 | 王五 | | 4 | 张飞 | +----+------+ 4 rows in set (0.00 sec)mysql> mysql> select group_concat(id)='1,2,8' -> from test -> where FIND_IN_SET(id,'1,2,8'); +--------------------------+ | group_concat(id)='1,2,8' | +--------------------------+ | 0 | +--------------------------+ 1 row in set (0.00 sec)mysql> mysql> select group_concat(id)='1,2,4' -> from test -> where FIND_IN_SET(id,'1,2,4'); +--------------------------+ | group_concat(id)='1,2,4' | +--------------------------+ | 1 | +--------------------------+ 1 row in set (0.00 sec)mysql>
谢谢我测试一下,是不是我想要的结果, 我就是不想把字符串分割成单个sql语句分开查询才想这样的,
FIND_IN_SET 不会使用索引,这样速度不是很快,不知道还有没有好的解决办法啊?
$result = $db->query_once("SELECT IF((SELECT COUNT(*) FROM test WHERE id IN (1,2,8))=(SELECT LENGTH('1,2,8') - LENGTH(REPLACE('1,2,8', ',', '')) + 1), 1, 0)"); //您看这个方法有什么bug吗?请问_chm大哥。
SELECT IF((SELECT COUNT(*) FROM test WHERE id IN (1,2,8))=( LENGTH('1,2,8') - LENGTH(REPLACE('1,2,8', ',', '')) +1), 1, 0)可以把第二个select 去掉。这样应该没有什么问题。 如果选出的记录数 = '1,2,3,4"中逗号的数量+1,就说明没有记录都有了。
+----+------+
| id | name |
+----+------+
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
| 4 | 张飞 |
+----+------+
4 rows in set (0.00 sec)mysql>
mysql> select group_concat(id)='1,2,8'
-> from test
-> where FIND_IN_SET(id,'1,2,8');
+--------------------------+
| group_concat(id)='1,2,8' |
+--------------------------+
| 0 |
+--------------------------+
1 row in set (0.00 sec)mysql>
mysql> select group_concat(id)='1,2,4'
-> from test
-> where FIND_IN_SET(id,'1,2,4');
+--------------------------+
| group_concat(id)='1,2,4' |
+--------------------------+
| 1 |
+--------------------------+
1 row in set (0.00 sec)mysql>
我就是不想把字符串分割成单个sql语句分开查询才想这样的,
FIND_IN_SET 不会使用索引,这样速度不是很快,不知道还有没有好的解决办法啊?
$result = $db->query_once("SELECT IF((SELECT COUNT(*) FROM test WHERE id IN (1,2,8))=(SELECT LENGTH('1,2,8') - LENGTH(REPLACE('1,2,8', ',', '')) + 1), 1, 0)");
//您看这个方法有什么bug吗?请问_chm大哥。
如果选出的记录数 = '1,2,3,4"中逗号的数量+1,就说明没有记录都有了。