mysql -数据类型和多个ID的Where条件


Php : Mysqli - Data Type and Where Conditions with Multiple ID

我有表格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字段中。

在我看来,最好(遵循规范的方式)为重新打开之间的多个链接再创建一个表。idproduct.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...
)