我想要优化这段可爱的代码:
$result = mysql_query("select day from cities where name='St Charles'");
$row = mysql_fetch_assoc($result);
$day = $row['day'];
$result = mysql_query("select id,durability from goods_meta_data");
while($row = mysql_fetch_assoc($result)) {
mysql_query("delete from possessions where day_created<" . ($day-$row[durability]) . " and good_id=" . $row['id']);
}
如果占有权已过期,它会从表'所有'中删除行。占有权是否已过期取决于表格“商品”和“城市”中的值。 具体来说,商品的年龄= day-day_created,如果商品的年龄超过其耐久性,那么它就会过期。 (每一种财产都是一种商品,每种商品都具有独特的耐久性。)
此代码有效,但我觉得这可以在一个查询中完成。 mysql服务器的延迟特别大,因此在较少的查询中执行此操作将非常有用。
我该怎么做?有什么想法吗?
另外,如果您能指出我可以学习如何以这种方式更好地利用关系数据库的任何有用资源,那将会很有帮助。
答案 0 :(得分:2)
假设您的第一个查询返回单个结果,那么这应该有效:
DELETE p
FROM possessions p
INNER JOIN goods_meta_data gmd ON p.good_id = gmd.id
INNER JOIN cities c ON c.name = 'St Charles'
WHERE p.day_created < c.day - gmd.durability