2016-03-02 91 views
0

我試圖從2個不同的MySQL表中獲取信息。平均和比較左加入MySQL

主表是這個:

primary sql table

從這一個我利用這些信息來得到這個平均速率:

rating sql table

哪有我寫了一個SQL查詢,通過計算所有行,得到average評級與rating_house = house_id,並按最高評分和如果相等的評級,最高的價格排序。

這是我想出了自己:

$sql = "SELECT l.location_address, " 
      . "r.rating_structure+r.rating_inventory+r.rating_service/3 AS average " 
      . "FROM houses h " 
      . "LEFT JOIN rating r ON h.house_id = r.rating_house " 
      . "LEFT JOIN location l ON h.house_address = l.location_id " 
      . "WHERE h.house_deleted IS NULL SORT BY average DESC LIMIT 10"; 
$result = $db_connect->prepare($sql); 
if($result->execute()){ 
    while($user_data = $result->fetch(PDO::FETCH_ASSOC)){ 
     $user_data['location_address']."<br>"; 
    } 
} 

但是我沒有得到任何輸出?

+1

注意,對於排序在MySQL中的關鍵字(每SQL方言,我知道的,包括ANSI標準)是'ORDER BY',而不是'SORT BY'。 –

回答

0

如果您知道相關行必須存在,則對於性能,請使用INNER JOIN而不是LEFT JOIN。

SELECT l.location_address, 
     (SUM(r.rating_structure)+SUM(r.rating_inventory)+SUM(r.rating_service))/3 AS average 
FROM houses h 
INNER JOIN rating r ON h.house_id = r.rating_house 
INNER JOIN location l ON h.house_address = l.location_id 
WHERE h.house_deleted IS NULL 
GROUP BY l.location_address 
ORDER BY 2, 
     (SUM(r.rating_structure)+SUM(r.rating_inventory)+SUM(r.rating_service)) DESC 
LIMIT 10 
+0

有沒有一種方法可以實現,如果沒有給出評分,它仍然會顯示?但在底部 – PhyCoMath

+0

如果沒有評級被存儲爲NULL,那麼它們的平均值應該返回爲NULL。如果這不起作用,請將r.rating_structure和其他包裝在IFNULL(r.rating_structure,0)中。這種方式NULL被平均爲零,並將顯示在底部。 –

+0

甜,謝謝:)另外,我可以正確計算,當相等的利率。你剛更新了嗎? – PhyCoMath

0

下面查詢應返回的房屋分類的平均收視率:

select h.house_id, (sum(hr.rating_structure) + sum(rating_inventory) + sum(rating_service))/3 as "average" 
from house h left outer join house_rating hr on h.house_id = hr.rating_house 
group by h.house_id 
order by average