MySQL Join和Count查询

时间:2012-06-15 14:12:14

标签: mysql sql database

我有两个MySQL表,如下所示;

广告

+-------------------+--------------+
| Field             | Type         |
+-------------------+--------------+
| id                | int(11)      |
| title             | varchar(150) |
+-------------------+--------------+

advert_interest_record

+--------------+------------+
| Field        | Type       |
+--------------+------------+
| id           | int(11)    | 
| advert_id    | int(11)    |
| message      | longtext   |
+--------------+------------+

我想从“advert”表中选择所有记录的列表 - 并从“advert_interest_record”表中获取ads.id = response.advert_id的行数。

我用来加入表的SQL如下:

SELECT advert.id, advert.title 
FROM advert 
LEFT JOIN advert_interest_record ON advert.id = advert_interest_record.advert_id  
GROUP BY advert_interest_record.advert_id 

我遇到的第一个问题是,当“advert_interest_record”表中没有记录时,“广告”表中的记录不包含在结果中 - 我需要它。

我的第二个问题是,我如何计算“advert_interest_record”表中的行?

对此有任何建议将不胜感激。

感谢。

4 个答案:

答案 0 :(得分:3)

首先;你从广告表中选择了两个字段;同时从advert_interest_record表中搜索一个字段。

假设对于所有advert.id值,advert.title值都相同,它可能会给出正确的结果。

反正;由于您希望广告中的数据处于领先地位,因此最好将该表的字段分组为您想要的唯一数据(这也有助于获取与其他表中的数据相关联的记录数)。

例如,您可以查询如下:

SELECT a.id, a.title, COUNT(air.id)
FROM advert a
LEFT JOIN advert_interest_records air ON a.id = air.advert_id
GROUP BY a.id, a.title

这将为您提供advert.id和advert.title的所有唯一组合的结果,以及advert_interest_records中与advert.id值相关联的记录数。

我假设advert.id是唯一的,并且每个id只出现一次。否则,对id和title进行分组(我认为,与其他DBMS相比,MySQL本身并不需要)可能会给你不正确的结果。

答案 1 :(得分:1)

这个怎么样:

   SELECT a.title, COUNT(air.id) 
     FROM advert a 
LEFT JOIN advert_interest_record air
       ON a.id = air.advert_id
    GROUP BY a.id

LEFT JOIN应保证advert表中的所有记录都包含在最终结果中。

答案 2 :(得分:1)

通过advert.id分组,并使用count()来计算您的记录。

没有advert_interest_record的广告应返回count()等于零。

SELECT advert.id, count(advert_interest_record.id) as interestcount
  FROM advert 
  LEFT JOIN advert_interest_record ON advert.id = advert_interest_record.advert_id  
GROUP BY advert.id;

答案 3 :(得分:0)

SELECT advert.id, advert.title, count(*) as totalRows 
FROM advert 
LEFT JOIN 
         advert_interest_record ON advert.id = advert_interest_record.advert_id  
GROUP BY advert.id, advert.title 

有关查询的一些注释

    来自原始查询的
  1. GROUP BY advert_interest_record.advert_id。您group by字段不属于SELECT字段。这导致您的问题
  2. 某些DBMS要求所有group by字段也必须出现在SELECT