Py学习  »  DATABASE

mysql中逗号分隔列表中id项的搜索

Snooze • 4 年前 • 861 次点击  

我想从mysql表中获取条目,该表在逗号分隔的列表中包含给定的id。我想使用正则表达式和类似的选择器。

我现在的方法是这样的

SELECT * FROM table WHERE list LIKE '%,0,%';

问题是这样会忽略列表中的第一个和最后一个元素,如“0,1,2,3”。

我试过用or运算符来测试所有可能的情况。

SELECT * FROM table WHERE list LIKE '(%,0,%)|(^0,%)';

我试过这个方法,有没有^字符,有没有括号,但在所有情况下,这个方法甚至都不匹配中间的字符。事实上,or运算符似乎不适用于最简单的表达式,如

SELECT * FROM table WHERE list LIKE '%(1|2)%';
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46474
 
861 次点击  
文章 [ 2 ]  |  最新文章 4 年前
Gordon Linoff
Reply   •   1 楼
Gordon Linoff    4 年前

你应该修正你的数据模型!不要把东西的清单——特别是数字——存储在一个字符串中。sql有一个很好的存储列表的数据模型:它被称为 桌子 是的。

如果你真的,真的,真的很糟糕地选择了其他人的DTA模型,你可以在里面工作。MySQL有一个方便的功能, find_in_set() ,这就是你想要的:

WHERE find_in_set('0', list) > 0
forpas
Reply   •   2 楼
forpas    4 年前

将逗号连接到列表的开头和结尾:

SELECT * FROM table WHERE concat(',', list, ',') LIKE '%,0,%';