我有个这样的数据表, articles下面是文章id号码 (mysql数据库)
要求结果:根据给定的文章id号 查出 id values 比如 articles给出的是 5 那么结果应该是 第一行and第三行 id values articles
1 aaa 1-2,4-9,37
2 bbb 23,80
3 ccc 1-24
要求结果:根据给定的文章id号 查出 id values 比如 articles给出的是 5 那么结果应该是 第一行and第三行 id values articles
1 aaa 1-2,4-9,37
2 bbb 23,80
3 ccc 1-24
1-2,4-9,37?如果是第一种可以用like %,param,%
如果是第二种,我觉得SQL写不了
SELECT 'c' REGEXP '^[a-b]';
其次,正则应该可以:我做了几个测试,应该没问题SELECT *
FROM articles a
WHERE articles REGEXP '(^|,)[0-5]-([5-9]|[0-9]{2,})(,|$)'
OR articles REGEXP '(^|,)5(,|$)'其中(^|,)代表这个片段要么在第一个字符要么以逗号开始,反之(,|$)代表要么在最后,要么以逗号结束
(^|,)5(,|$) 就是单独的一个5
(^|,)[0-5]-([5-9]|[0-9]{2,})(,|$)代表x-y
其中[0-5]代表x=0、1、2...5,且只能是1位数,“-”是连字符,([5-9]|[0-9]{2,})代表y可以是5、6、7、8、9的一位数或者位数在两位以上({2,})的数字。测试数据:
1, 'aaa', '1-2,4-9,37'
2, 'bbb', '23,80'
3, 'ccc', '1-24'
4, 'ddd', '1,3,5'
5, 'eee', '5'
6, 'fff', '1,3,5,7,9'
7, 'ggg', '15,23'
8, 'hhh', '15-23'
9, 'iii', '5-7'
10, 'jjj', '1-5'
检索结果
1, 'aaa', '1-2,4-9,37'
3, 'ccc', '1-24'
4, 'ddd', '1,3,5'
5, 'eee', '5'
6, 'fff', '1,3,5,7,9'
9, 'iii', '5-7'
10, 'jjj', '1-5'
我想应该这些测试数据覆盖度应该足够了。
再次希望lz,如果这个是实战项目,还是增加表
你以為 sql 語句是神啊, 這樣的問題, 只能用程序去控制了 !!!!!
- -!!!!!!