我有表格product
id | Name | catid |
1 | A | 2
2 | B | 2
3 | c | 2
4 | D | 2
5 | ch | 2
7 | kj | 2
其中id为产品表的主键
以上id得到重新打开多次
open table:
re_id | testName | catid | product_id |
1 | not okk | 2 | 1,2,3,4 |
2 | not okk | 2 | 5,7 |
where 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)"
如果您不想使用本机对引用完整性的支持,您可以将值列表存储在varchar字段中。
在我看来,最好(遵循规范的方式)为重新打开之间的多个链接再创建一个表。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
你问了几个问题:
如何生成重开表?
首先在sql中获取数据:Select id from product where…你的条件…
第二:使用结果数组,执行PHP内爆:美元product_id =内爆("、"resultarray);
,然后使用SQL insert将其插入到重新打开的表中。
你可以访问id的重新打开使用sql WHERE in?
不,不幸的是SQL IN操作符只能在单个数字或单个字符串值,而不是on组合字符串
如何进行?
只需使用产品表:执行内部选择以获得重新打开的行和然后在外部select中使用WHERE IN条件:
select id from product where id in (
select id from product where ...your condition...
)