我有两个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”表中的行?
对此有任何建议将不胜感激。
感谢。
答案 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
有关查询的一些注释
GROUP BY advert_interest_record.advert_id
。您group by
字段不属于SELECT
字段。这导致您的问题group by
字段也必须出现在SELECT
个