我有一个表,用户通过复选框存储它的首选项。第一个插入工作正常,但如果用户想要更新首选项怎么办?我当前的逻辑将创建新的行,这是坏的。
有人告诉我删除与用户关联的所有行,然后重新插入,但我读到它会给服务器带来很多负担。
另一个是序列化,但我听说这是一个不好的做法。
如何仅更新用户想要更改的首选项? (假设用户取消选中年龄0-1并检查7-10。然后它应该从数据库中删除0-1,并添加7-10。
HTML
<div class="row">
<div class="col-md-12">
<div class="col-md-2 img-thumbnail">
<img src="assets/images/boy_icon.png" alt="pencil" class="img-circle">
<div class="checkbox">
<input type="checkbox" data-id="1" name="childAgeRanges[]" value="0-1" checked="checked">
<label for="0-1">age 0-1</label>
</div>
</div>
<div class="col-md-2 img-thumbnail">
<img src="assets/images/boy_icon.png" alt="pencil" class="img-circle">
<div class="checkbox">
<input type="checkbox" data-id="2" id="1-3" name="childAgeRanges[]" value="1-3" checked="checked">
<label for="1-3">age1-3</label>
</div>
</div>
<div class="col-md-2 img-thumbnail">
<img src="assets/images/boy_icon.png" alt="pencil" class="img-circle">
<div class="checkbox">
<input type="checkbox" data-id="3" id="4-6" name="childAgeRanges[]" value="4-6" checked="checked">
<label for="4-6">age 4-6</label>
</div>
</div>
<div class="col-md-2 img-thumbnail">
<img src="assets/images/boy_icon.png" alt="pencil" class="img-circle">
<div class="checkbox">
<input type="checkbox" id="7-10" name="childAgeRanges[]" value="7-10" checked="checked">
<label for="7-10">age 7-10</label>
</div>
</div>
</div>
</div>
我的表:
age_id | user_id | range_id
1 1 | 0-1
2 1 | 1-3
3 1 | 4-6
答案 0 :(得分:0)
对于此示例,在运行更新查询之前,请选择用户年龄列表。循环它们并检查它们是否在childAgeRanges数组中。如果没有删除其ID。您也可以使用相同的方式添加它们。循环childAgeRanges数组并检查它们是否在结果集中。但如果你问我,我肯定会删除所有年龄,然后再添加它们。 Ot会在服务器和代码上使用更少的资源,不会一团糟。并且相信我删除和添加不会对您的服务器产生严重影响,用户通常不会在他们的设置中进行这么多类型的更改。