2

我希望跨多个表选择结果,但我只想根据COUNT()连接SELECT查询的结果返回行。

以下是查询目前的样子:

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

出于某种原因,查询返回NULLfor num_imgs。本质上,我只想选择listingsImages表中至少有 4 条记录的记录。

请注意,这是针对遗留系统的,我没有设计数据库!因此,我现在可以选择更改架构。

4

2 回答 2

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
于 2013-05-31T14:22:35.573 回答
0

这可能是罪魁祸首:

ON `s`.`venue_id` = `x`.`listing_id`
于 2013-05-31T14:21:00.990 回答