PHP内爆字符串中的SQL Where和Like
我的pgsql数据库中有文本字段,其中包含用户标识符。一个字段可以包含一个或多个由分隔符分隔的ID。在保存时,数字是使用PHP内爆的,因此我可以使用以下示例:PHP内爆字符串中的SQL Where和Like,sql,postgresql,implode,Sql,Postgresql,Implode,我的pgsql数据库中有文本字段,其中包含用户标识符。一个字段可以包含一个或多个由分隔符分隔的ID。在保存时,数字是使用PHP内爆的,因此我可以使用以下示例: Row 1: 3#36#66#33 Row 2: 5#56#33#55. 我应该如何准备SQL查询以选择具有一个或多个ID的字段而不产生任何歧义 例如: SELECT product FROM cms_product WHERE product_mod LIKE '3' 第1行和第2行都可以选择,这是我不想要的。我怎么能修好它 编辑
Row 1: 3#36#66#33
Row 2: 5#56#33#55.
我应该如何准备SQL查询以选择具有一个或多个ID的字段而不产生任何歧义
例如:
SELECT product FROM cms_product WHERE product_mod LIKE '3'
第1行和第2行都可以选择,这是我不想要的。我怎么能修好它
编辑:
我必须选择此字段中包含用户ID的所有行,例如:
UserId: 3
Field 1:
55#64#333#2
Field 2:
12#3#55#6423
Field 3;
654#33#11#98
只应选择字段2。尽管您确实应该努力使数据库正常化,但这是对发布问题的回答
select product
from cms_product
where '3' = any(regexp_split_to_array(product_mod, '#'))
首先是数据库规范化。。。。aaaaaaaand's gone reference:但更严肃的是,包含多个字符分隔值的列通常是代码气味的标志,或者是糟糕的模式设计。我不知道postgresql是否有专门的工具来处理这些问题,但从你的查询中我说没有,或者至少你没有使用它们。你的问题对我来说很不清楚。你到底想做什么?您想搜索3,但不想查找包含364或33的行?无论如何。你的数据库设计一团糟,你没有注意到规范化。永远不要存储逗号或任何其他字符分隔的列表。曾经认真检查数据库规范化。这会让你的问题自行消失——看看这个:我现在明白了。我现在正在投影这张桌子,我想这样做。。。我会考虑你的小费。我肯定会把它规范化,但是我希望你的建议是这样+1.是的,这就是我在寻找归化DB之前所要寻找的。