2013-05-31 118 views
2

我希望在多個表中選擇結果,但我只想根據加入SELECT查詢的COUNT()結果返回行。MySQL加入SELECT COUNT()

這裏的查詢如何看待當下:

SELECT `s`.`venue_id` AS `id`, 
     CONCAT(`u`.`First_name`, ' ', `u`.`Surname`) AS `user_name`, 
     `u`.`avatar` AS `avatar`, 
     `u`.`facebookId` AS `fid`, 
     `x`.`imgs` AS `num_imgs` 
     FROM `new_shortlists_venues` `s` 
     INNER JOIN `new_shortlists` ON `new_shortlists`.`id` = `s`.`list_id` 
     INNER JOIN `users` `u` ON `u`.`id` = `new_shortlists`.`bride_id` 
     LEFT JOIN (SELECT `listing_id`, COUNT(*) `imgs` FROM `listingsImages`) `x` ON `s`.`venue_id` = `x`.`listing_id` 
     WHERE `new_shortlists`.`venues` > 4 
     AND `new_shortlists`.`bride_id` != 0 
     GROUP BY `s`.`list_id` 
     ORDER BY `s`.`date_added` DESC 
     LIMIT 6 

出於某種原因,該查詢返回NULLnum_imgs。基本上,我只想選擇listingsImages表中至少有4條記錄的記錄。

請注意,這是一個遺留系統,我沒有設計數據庫!因此,我現在可以選擇更改模式。

回答

2

你離開了你的子查詢的GROUP BY。您當前的查詢返回COUNT(*)與隨機listing_id關聯。添加GROUP BY listing_id,你應該返回正確的計數。

SELECT `s`.`venue_id` AS `id`, 
    CONCAT(`u`.`First_name`, ' ', `u`.`Surname`) AS `user_name`, 
    `u`.`avatar` AS `avatar`, 
    `u`.`facebookId` AS `fid`, 
    `x`.`imgs` AS `num_imgs` 
    FROM `new_shortlists_venues` `s` 
     INNER JOIN `new_shortlists` ON `new_shortlists`.`id` = `s`.`list_id` 
     INNER JOIN `users` `u` ON `u`.`id` = `new_shortlists`.`bride_id` 
     LEFT JOIN (SELECT `listing_id`, COUNT(*) `imgs` 
        FROM `listingsImages` 
        GROUP BY `listing_id`) `x` ON `s`.`venue_id` = `x`.`listing_id` 
    WHERE `new_shortlists`.`venues` > 4 
     AND `new_shortlists`.`bride_id` != 0 
    GROUP BY `s`.`list_id` 
    ORDER BY `s`.`date_added` DESC 
    LIMIT 6 

,並返回那些具有至少4個記錄,只是約束添加到您的WHERE標準:

AND `x`.`imgs` >= 4 
+0

這是偉大的!謝謝你的幫助。 – BenM

+0

@BenM - np,很高興能幫到你! – sgeddes

0

這可能是罪魁禍首:

ON `s`.`venue_id` = `x`.`listing_id`