Php:Mysqli - 数据类型和具有多个ID的条件

时间:2014-05-03 07:19:04

标签: php mysql database

我有桌面产品

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)"

2 个答案:

答案 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 WHERE重新打开id?

不,不幸的是,SQL IN运算符可以继续工作 单个数字或单个字符串值,而不是 在你的情况下结合严格。

如何进行?

只需使用产品表: 进行内部选择以获得重新打开行和 然后在外部选择中使用WHERE IN条件:

select id from product where id in ( 
    select id from product where ...your condition...
)