如果每部手机的功能数量会发生变化,那么您必须删除并插入。要更新,您需要:
- 获取当前的特征集
- 弄清楚有什么不同,添加了什么,删除了什么
- 运行查询以更新、插入新数据和删除旧数据。
就好像您只是删除整个列表并重新插入它们一样,您可以省去一些维护上的麻烦。
如果您的数据的一致性是一个问题或担忧(数据被删除但在插入之前发生错误导致脚本无法完成),那么将您的查询包装在事务中。
举个例子:
我有一个博客Posts(id, title, body)
和Categories(id, post_id, category)
。我的第一篇文章“Hello World”被归类为“meta、php 和 javascript”。然后一年后,我修改了帖子以获得一些关于mysql的信息(或者我添加了一个mysql类别)并取出了javascript。
这是我需要做的(主要是伪代码):
//old set
SELECT * FROM Categories WHERE post_id=1
foreach($categories as $category) {
if(in_array($category['id'], $_POST['categories']) {
//this category is in the new set and the old set, do nothing
}
elseif(!in_array($category['id'], $_POST['categories']) {
//this category is in the old set, but not the new one, delete it
$queries[] = "DELETE FROM Categories WHERE id=".$category['id'];
}
else {
//new category, add it
$queries[] = "INSERT INTO Categories()..."
}
}
foreach($queries as $item) {
//run query
}
与此相反:
DELETE FROM Categories WHERE post_id=$_POST['id']
foreach($_POST['categories'] as $item) {
INSERT INTO Categories() ...
}
就个人而言,我认为选项#2更好。