这个重构在我看来是可行的,但是我希望有人来检查我的逻辑:
当前过程:
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,每个查询都有很多参数,这将节省大量的空间。
但我想先把它贴在这里,以确保我没有忽略什么。
重构会产生相同的结果吗?
如果您不关心主键的更改,则使用REPLACE
。如果键需要保持一致,例如,如果它已经映射到其他表,则继续使用INSERT
和UPDATE
。REPLACE
删除和重新插入,所以如果你的主键是auto_increment
字段,它将更改为新的增量值。