多个查询MySQL PHP

时间:2012-08-04 06:27:04

标签: php mysql

是否有正确的方法来做到这一点。我想计算表的平均评级,并同时在另一个表中更新结果。我是PHP和MYSQL的新手,我将不胜感激任何帮助

$query=mysql_query("INSERT INTO review (username, restaurant, rating, review) VALUES ('$username','$restaurant','$rating','$review')");
if($query)
{
    $avg_query="SELECT ROUND(AVG(rating),0) FROM review WHERE name =\"$restaurant\"";
    $avg_result=mysql_query($avg_query);
    $avg_row=mysql_fetch_array($avg_result);
    $rating=$row['ROUND(AVG(rating),0)'];
    if($avg_result)
    {   
        $update_query= "UPDATE restaurant SET rating=\"$rating\" WHERE name =\"$restaurant\"";
        $update_result=mysql_query($update_query);
    }
}
else
{
}

谢谢!

3 个答案:

答案 0 :(得分:0)

UPDATE restaurant 
SET rating= (SELECT ROUND(AVG(rating),0) FROM review WHERE name ='$restaurant')
WHERE name ='$restaurant'

答案 1 :(得分:0)

我会把这两者合二为一:

$query=mysql_query("INSERT INTO review (username, restaurant, rating, review) VALUES ('$username','$restaurant','$rating','$review')");
if($query)
{
    $avg_query="UPDATE restaurant a SET rating=(SELECT ROUND(AVG(rating),0) FROM review WHERE name =a.name) WHERE name ='".$restaurant."'";
    $avg_result=mysql_query($avg_query);
}
else
{
}

话虽如此,您应该转移到PDO或mysqli,因为mysql_*函数已被折旧。

答案 2 :(得分:0)

另一种选择是使用mysql trigger。例如(不要让我按语法):

CREATE TRIGGER after_insert_review
AFTER INSERT ON review
FOR EACH ROW
BEGIN
    UPDATE restaurant 
    SET rating = (SELECT ROUND(AVG(rating),0) FROM review WHERE name = NEW.restaurant)
    WHERE name = NEW.restaurant;
END

如其他人所述,请使用PDOMySQLi