我有桌面产品
id | Name | catid |
1 | A | 2
2 | B | 2
3 | c | 2
4 | D | 2
5 | ch | 2
7 | kj | 2
其中id是产品表的主键
以上ID多次重新开启
重新开启表格:
re_id | testName | catid | product_id |
1 | not okk | 2 | 1,2,3,4 |
2 | not okk | 2 | 5,7 |
其中re_id是主键
我想..我可以插入多个值(我如何显示1,2,3,4)以便我可以获得WHERE IN条件的列表。
想知道在DB中使用这种条件是否安全
如何在单个字段中插入多个ID。什么应该是数据类型
更新:
下面是可能的吗?
"INSERT INTO reopen (testname,catid,product_id) VALUES ('not okk','2','1,2,3,4') "
AND
"SELECT * FROM reopen WHERE product_id IN (1,2,3,4)"
答案 0 :(得分:1)
如果您不想使用本机支持的参考完整性,您可以在varchar字段中存储值列表。
在我的观点中,(遵循规范方式)为 reopen.id 和 product.id 之间的多个链接再创建一个表格要好得多。
reopen_id | product_id
----------+-----------
1 | 1
1 | 2
1 | 3
1 | 4
2 | 5
2 | 7
通过在两个字段上添加复合键,您无法创建重复链接。要对数据进行加密,您可以使用多行插入命令INSERRT INTO links (1,1),(1,2)…
对于WHERE条件,您可以使用普通IN运算符
您不需要任何文本操作,它可以加快查询速度
列表中的许多值没有任何限制。
在这种情况下,存储更为理想
<强>更新强>
请参阅sqlfiddle
答案 1 :(得分:0)
你问过几个问题:
首先在sql中获取数据: 从产品中选择ID ...您的条件......
第二: 使用结果数组,执行php implode: $ PRODUCT_ID =破灭(&#34;&#34;,resultarray);
然后使用sql insert将其插入重新打开表。
不,不幸的是,SQL IN运算符可以继续工作 单个数字或单个字符串值,而不是 在你的情况下结合严格。
只需使用产品表: 进行内部选择以获得重新打开行和 然后在外部选择中使用WHERE IN条件:
select id from product where id in (
select id from product where ...your condition...
)