1

所以我有一些 CSV 值存储在 mySQL 数据库中。

例如:

ID    Name     parentID
1     Dave     1,4,6
2     Josh     2
3     Pete     10
4     Andy     2,10

使用此查询

SELECT * FROM `table` WHERE `parentID` LIKE %4%

只有戴夫会被退回,这是正确的。但是,如果我选择使用:LIKE %1%,则选择 pete 和 andy 以及 dave,因为它们包含 '1'。

例如,我需要查询能够区分“10”和“1”。它需要承认逗号之间的每个值都是不同的,并理解最后一个逗号可能被省略的事实。

我认为也许 REGEX 可以代替这项工作是对的吗?

谢谢。

4

1 回答 1

3

您可以使用正则表达式来匹配“单词边界”:

WHERE parentID RLIKE '[[:<:]]4[[:>:]]'

或者您可以使用一个特殊函数来解析逗号分隔字符串的元素:

WHERE FIND_IN_SET('4', parentID) <> 0

我同意@Nanne 的评论。

您还会发现,最好不要将数据存储在逗号分隔的列表中,而是以标准化的方式存储。我不知道您此时是否可以自由更改架构,但是对于它的价值,请阅读我对问题的答案在数据库列中存储分隔列表真的那么糟糕吗?

于 2013-06-13T20:18:16.783 回答