gpt4 book ai didi

php - 从 SQL DB 添加和/或删除记录

转载 作者:行者123 更新时间:2023-11-30 00:27:23 25 4
gpt4 key购买 nike

大家好,我遇到一种情况,网站上有一个可选择的项目列表,其中每个选定的项目在 mySQL 表中都有一条记录:

parentID BIGINT NOT NULL
childID BIGINT NOT NULL

“parentID”是“childID”所属记录的 ID,因此数据库可能包含以下内容:

2 | 13
4 | 8
4 | 10
4 | 7

这表明 #4 记录有 3 个与之关联的记录 (7,8,10)。现在假设用户选择网站列表中的另一个项目(例如记录 9),但也取消选择记录 7,那么从列表中删除记录 7 同时添加记录 9 的最佳实践是什么?我已经考虑过使用“NOT IN”语句(没有成功)和“NOT EXIST”语句(但没有实现),但我想在花太多时间在可以做得更好的事情上之前先在这里问一下我自己的设计。

戴夫

最佳答案

可以编写应用程序逻辑来检测何时删除一行而添加另一行,并将其与 UPDATE 查询一起使用,将“已删除”行修改为“已添加”行。但坦率地说,这是一种明显的优化被复杂性所掩盖的情况(如果删除两行但只添加一行会发生什么?反之亦然?),结果将是一场无法维护的噩梦。

相反,我建议进行两次传递——一次删除已删除的记录,第二次插入新记录。

您的 DELETE 查询可能如下所示:DELETE FROM tableName WHERE ParentID=4 AND childID NOT IN (8,10,9),其中 8、10 和 9 是传入的记录 ID通过您的表单访问您的应用程序。您会注意到 childID 9 在查询中,但不在数据库中;没关系,它不会造成任何损害,而这只是将所有传递的 ID 粘合到一个查询中是最简单的选择这一事实的副作用。 (请注意,这只是一个选项;另一个选项是首先选择现有的 childID,然后将其与表单中传入的 ID 列表进行比较,然后删除已删除的 ID。)

然后,您的 INSERT 传递将循环遍历表单中传入的 ID,并插入不在数据库中的 ID。这可能需要首先执行 SELECT 来查找存在的 ID,然后将其与传入的 ID 进行比较,以查找数据库中尚未存在的 ID。我不会对此进行太多讨论,因为您似乎已经有了添加行的功能逻辑;不过,如果情况并非如此,我可以进一步详细说明。

无论哪种情况,绝对确定您正在清理输入以防止 SQL 注入(inject)!请参阅this question以及有关该主题的更多信息的答案。

关于php - 从 SQL DB 添加和/或删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22766457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com