现在我正在使用PHP运行这两个查询:
UPDATE members SET balance = balance - $cost WHERE id = '$member'");
UPDATE campaigns SET h_hits = h_hits + 1,
d_hits = d_hits + 1,
traffic = traffic + 1,
spent = spent + $cost,
timestamp = CURRENT_TIMESTAMP
WHERE id = '$row_id'
我已经看到了关于运行多个更新的一些问题,但是其中大多数似乎共享相同的WHERE
语句,而我的则需要使用不同的:/
这是我的两个问题:
答案 0 :(得分:0)
您可以使用CROSS JOIN
组合它们,这不需要两个表中的行之间有任何关系。您可以在WHERE
子句中为每个表指定条件。
UPDATE members AS m
CROSS JOIN campaigns AS c
SET m.balance = m.balance - $cost,
c.h_hits = c.h_hits + 1,
c.d_hits = c.d_hits + 1,
c.traffic = c.traffic + 1,
c.spent = c.spent + $cost,
timestamp = CURRENT_TIMESTAMP
WHERE c.id = '$member'
AND m.id = '$row_id'
这是否比执行它们更好,因为很难预测两个查询,因为这取决于许多因素,例如客户端和数据库服务器之间的连接延迟。如果他们在同一台机器上,我怀疑不是。您应该对这两种方法进行基准测试,以确定哪种方法最适合您。
如果要进行许多此类查询,则只需准备一次查询,然后使用不同的参数执行这些查询,就可以提高性能,因为只需要在准备查询时对其进行分析即可。