2014-01-29 190 views
0

我有以下2個查詢:MySQL的 - 結合單結果查詢和多結果查詢到一個

此表可以爲每個用戶多行(很多照片),我只是想返回的照片數量/計數:

SELECT COUNT(*) FROM photos WHERE photo_description_profanity=1 AND photo_visible=1 AND photo_verified=1 AND userid='1000000002'; 

這桌只有每個用戶一個:

SELECT a.userid,a.profile_username,a.profile_gender,a.photo_name,a.photo_verified,b.profile_headline, 
     YEAR(DATE_SUB(NOW(), INTERVAL TO_DAYS(a.profile_birthdate) DAY)) AS age,d.city,c.english AS country 
FROM login AS a 
JOIN `profiles` AS b ON a.userid=b.userid 
JOIN geoCountry AS c ON a.profile_country=c.countryCode 
JOIN geoWorld AS d ON a.profile_geo_location=d.pid 
WHERE a.userid IN ('1000000002','1000000003','1000000004'); 

是否有可能這兩個查詢組合?

這是在我的能力極限,因此任何意見將是巨大的:) THX

+0

請顯示您想要的結果。 –

回答

1
SELECT 
    a.userid, 
    a.profile_username, 
    a.profile_gender, 
    a.photo_name, 
    a.photo_verified, 
    b.profile_headline, 
    YEAR(DATE_SUB(NOW(), 
    INTERVAL TO_DAYS(a.profile_birthdate) DAY)) AS age, 
    d.city,c.english AS country, 
    (SELECT COUNT(*) FROM photos WHERE photo_description_profanity=1 AND photo_visible=1 AND photo_verified=1 AND userid= a.userid) AS result_count 
FROM login AS a 
JOIN `profiles` AS b ON a.userid=b.userid 
JOIN geoCountry AS c ON a.profile_country=c.countryCode 
JOIN geoWorld AS d ON a.profile_geo_location=d.pid 
WHERE a.userid IN ('1000000002','1000000003','1000000004'); 
+0

Hey thx so much ... works great ... did not know我可以添加一個選擇/查詢到像這樣的選擇...會記住...讚賞:) – Adam

1

這是可能的。這需要兩個步驟:

  • 適應COUNT(*)轉換成濾波SUM()
  • 堵塞源表到查詢

SELECT a.userid,a.profile_username,a.profile_gender,a.photo_name,a.photo_verified,b.profile_headline, 
     YEAR(DATE_SUB(NOW(), INTERVAL TO_DAYS(a.profile_birthdate) DAY)) AS age,d.city,c.english AS country 

//Here we insert the count column 
,IFNULL(SUM(IF(photo_description_profanity=1 AND photo_visible=1 AND photo_verified=1,1,0)),0) AS photocount 

FROM login AS a 
JOIN `profiles` AS b ON a.userid=b.userid 
JOIN geoCountry AS c ON a.profile_country=c.countryCode 
JOIN geoWorld AS d ON a.profile_geo_location=d.pid 

//Here we insert the source table 
LEFT JOIN photos ON photos.userid=a.userid 

WHERE a.userid IN ('1000000002','1000000003','1000000004') 

//Group by users 
GROUP BY a.userid 
+0

這將在MySQL中返回一行。 –

+0

@GordonLinoff謝謝! GROUP BY部分在複製粘貼模式下轉義了我的鼠標。 –

1

如果你想這是一個額外的列,然後穿過它加入到結果:

select const.cnt, . . . 
from (SELECT COUNT(*) as cnt 
     FROM photos 
     WHERE photo_description_profanity=1 AND photo_visible=1 AND 
      photo_verified=1 AND userid='1000000002' 
    ) const cross join 
    login AS a 
    JOIN `profiles` AS b ON a.userid=b.userid 
    JOIN geoCountry AS c ON a.profile_country=c.countryCode 
    JOIN geoWorld AS d ON a.profile_geo_location=d.pid 
//Here we insert the source table 
    LEFT JOIN photos ON photos.userid=a.userid 
WHERE a.userid IN ('1000000002','1000000003','1000000004'); 

使用cross join代替嵌套選擇查詢的優點是性能。 MySQL將爲返回集中的每一行執行嵌套選擇。在from條款中,它只會被執行一次。