3

我有这段可爱的代码要优化:

$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 服务器的延迟特别大,因此在较少的查询中执行此操作将非常有益。

我怎么做?有任何想法吗?

此外,如果您可以向我指出任何有用的资源,我可以在其中了解如何以这种方式更好地利用关系数据库,这将很有帮助。

4

1 回答 1

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 
于 2013-07-14T23:38:44.993 回答