2014-10-29 109 views
0

我有一個查詢正在檢查5個評論網站的數據並返回site_id,review_count & review_average。如果在mysql查詢中找不到任何結果,填充空白數據

如果沒有評論網站的數據,那麼我想返回0爲&的平均值。

這是可能在一個MySQL查詢嗎?

MySQL的:

SELECT rrss.review_site_id,rrss.review_count,rrss.review_average,rs.name 
FROM rooftops_review_sites_snapshots rrss 
LEFT JOIN review_sites rs ON rrss.review_site_id = rs.id 
WHERE rrss.rooftop_id = 185 
AND rrss.import_id = 16 
AND rrss.review_site_id IN (31,30,12,10,29) 

電流輸出:

Array 
(
[google] => Array 
    (
     [review_site_id] => 31 
     [review_count] => 24 
     [review_average] => 3.80 
    ) 

[edmunds] => Array 
    (
     [review_site_id] => 12 
     [review_count] => 8 
     [review_average] => 4.50 
    ) 

) 

所需的輸出:

Array 
(
[google] => Array 
    (
     [review_site_id] => 31 
     [review_count] => 24 
     [review_average] => 3.80 
    ) 

[edmunds] => Array 
    (
     [review_site_id] => 12 
     [review_count] => 8 
     [review_average] => 4.50 
    ) 
[yelp] => Array 
    (
     [review_site_id] => 31 
     [review_count] => 0 
     [review_average] => 0 
    ) 

[dealerrater] => Array 
    (
     [review_site_id] => 12 
     [review_count] => 0 
     [review_average] => 0 
    ) 
[cars] => Array 
    (
     [review_site_id] => 12 
     [review_count] => 0 
     [review_average] => 0 
    ) 

) 
+1

如果'review_sites'表中存在的所有站點,它切換到謂語用另一臺在'LEFT JOIN'。 – 2014-10-30 00:01:52

回答

0

試試這個

SELECT 
rrss.review_site_id, 
ISNULL(rrss.review_count, 0), 
ISNULL(rrss.review_average, 0), 
rs.name 

FROM rooftops_review_sites_snapshots rrss 

LEFT OUTER JOIN review_sites rs 
ON rrss.review_site_id = rs.id 

WHERE rrss.rooftop_id = 185 
AND rrss.import_id = 16 
AND rrss.review_site_id IN (31,30,12,10,29) 
0

你的表的更換位置和使用ISNULL()。檢查下面的查詢。

SELECT rs.id,rs.name, ISNULL(rrss.review_count, 0), ISNULL(rrss.review_average, 0) FROM review_sites rs LEFT JOIN rooftops_review_sites_snapshots rrss ON rrss.review_site_id = rs.id WHERE rrss.rooftop_id = 185 AND rrss.import_id = 16 AND rrss.review_site_id IN (31,30,12,10,29)