Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP内爆字符串中的SQL Where和Like_Sql_Postgresql_Implode - Fatal编程技术网

PHP内爆字符串中的SQL Where和Like

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行都可以选择,这是我不想要的。我怎么能修好它 编辑

我的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行都可以选择,这是我不想要的。我怎么能修好它

编辑:

我必须选择此字段中包含用户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之前所要寻找的。