2012-08-04 71 views
0

是否有正確的方法來執行此操作。我想計算一個表的平均評分,並同時在另一個表中更新結果。林新的PHP和MYSQL和我將不勝感激任何幫助多個查詢MySQL PHP

$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 
{ 
} 

謝謝!

+0

聽起來像是你想要一個子查詢 – 2012-08-04 06:28:22

+1

使用參數化查詢!切勿將變量直接插入查詢字符串! http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php – 2012-08-04 06:38:31

回答

0
UPDATE restaurant 
SET rating= (SELECT ROUND(AVG(rating),0) FROM review WHERE name ='$restaurant') 
WHERE name ='$restaurant' 
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 
{ 
} 

話雖如此,由於mysql_*功能貶值,你應該動過要麼PDO或mysqli的。

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