这个重构似乎在我的头脑中可行,但我希望有人检查我的逻辑:
当前流程:
if (item == new) {
INSERT INTO basic_table
$itemUID = get last insert ID // item's UID
INSERT INTO another_table // more stuff
INSERT INTO another_table2 // more stuff
INSERT INTO another_table3 // more stuff
} else {
$itemUID = $_POST['uid']
UPDATE basic_table
REPLACE INTO another_table // more stuff
REPLACE INTO another_table2 // more stuff
REPLACE INTO another_table3 // more stuff
}
(注意 - REPLACE INTO 用于现有项目,因为它们可能会或可能不会在所有表格中都有条目,具体取决于其初始配置)
我想到,由于除INSERT INTO // REPLACE INTO
之外的所有后续查询都相同,我应该能够重构为:
if (item == new) {
INSERT INTO basic_table
$itemUID = get last insert ID // item's UID
} else {
$itemUID = $_POST['uid']
UPDATE basic_table
}
REPLACE INTO another_table // more stuff
REPLACE INTO another_table2 // more stuff
REPLACE INTO another_table3 // more stuff
考虑到我正在使用PDO并且每个查询都有很多参数,这将节省空间的 crapload 。
但我想先在这里张贴,以确保我不会忽略某些东西。
这种重构会产生相同的结果吗?
答案 0 :(得分:1)
如果您不关心更改主键,请使用REPLACE
。如果密钥需要保持一致,如果已映射到其他表,则继续使用INSERT
和UPDATE
。 REPLACE
删除并重新插入,因此如果您的主键是auto_increment
字段,它将更改为新的增量值。