标题可能描述的不清楚,我举个例子: -- ---------------------------- -- Table structure for `test` -- ---------------------------- DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `A` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of test -- ---------------------------- INSERT INTO `test` VALUES (""1"", ""1,2""); INSERT INTO `test` VALUES (""2"", ""2,3,4""); INSERT INTO `test` VALUES (""3"", ""2,3""); 有一个一直变量B=‘1,2,3’,我想通过REGEXP实现查询获取id分别为1和3的数据,因为我对正则表达式一窍不通,所以来请教如何实现? |
|
为什么不是查id为 1 / 2 / 3的呢
|
|
5分 |
可以考虑用 instr / find_in_set
正则的话就有点多余了 WHERE “”[1,2,3]”” regexp ID |
这两个函数不能直接用啊,因为被查参数只能是单个值,如果要用还要先拆分循环变量B。 正则表达式应该怎么实现呢?求教各位前辈! |
|
mysql> select * from test; +----+-------+ | id | A | +----+-------+ | 1 | 1,2 | | 2 | 2,3,4 | | 3 | 2,3 | +----+-------+ 3 rows in set (0.00 sec) mysql> set @B="1,2,3"; Query OK, 0 rows affected (0.00 sec) mysql> select * from test where instr(@B,A); +----+------+ | id | A | +----+------+ | 1 | 1,2 | | 3 | 2,3 | +----+------+ 2 rows in set (0.00 sec) 以上测试完全符合楼主提供的测试用例。所以说有时举例的确是一种学问,需要细心,耐心。 |
|
35分 |
mysql> select * from test; +----+-------+ | id | A | +----+-------+ | 1 | 1,2 | | 2 | 2,3,4 | | 3 | 2,3 | +----+-------+ 3 rows in set (0.00 sec) mysql> set @B="1,2,3"; Query OK, 0 rows affected (0.00 sec) mysql> select * from test -> where concat(A,",") regexp concat("^((", replace(@B,",","|"), "),)*$"); +----+------+ | id | A | +----+------+ | 1 | 1,2 | | 3 | 2,3 | +----+------+ 2 rows in set (0.00 sec) mysql> . |
我举得例子有点不妥,如果id为1的记录中A字段为1,3的话,instr就查不到这条记录了。 |
|
这个可就完全可以实现我没表达清楚的功能,只要A字段中的值在变量B中出现过就能查到。 |
|