我正在尝试获取属于我的“广告”表(也属于用户)中的各个行的点击和观看次数。我还尝试按观看次数最多的广告来排序结果。
我的表结构:
用户:
id name
1 James
广告:属于用户(FK:user_id)
id user_id
22 1
23 4
观看次数:属于广告(FK:ad_id)
id ad_id
1 22
2 22
3 23
点击次数:属于广告(FK:ad_id)
id ad_id
1 22
2 22
3 23
在上面的表格中,我想要一个结果,其中包含有关ID为1的用户的所有广告的数据以及每个广告的点击次数和观看次数
id user_id clicks_count views_count
22 1 2 2
这就是我到目前为止所拥有的。使用此SQL,我只获得一个/第一个“ ads”行的正确视图和点击次数,但是忽略了其他匹配的行。
SELECT ads.id, COUNT(DISTINCT views.id) AS view_count, COUNT(DISTINCT clicks.id) AS click_count
FROM users
INNER JOIN ads ON ads.`user_id` = users.`id`
INNER JOIN views ON ads.id = views.`ad_id`
INNER JOIN clicks ON ads.id = clicks.`ad_id`
WHERE users.`id` = 1
GROUP BY views.`ad_id`
ORDER BY `view_count` DESC
这是一个sqlfiddle http://sqlfiddle.com/#!2/5c43c/1/0
提前致谢
您需要使用LEFT OUTER JOIN
不丢失点击次数的广告
SELECT ads.id, COUNT(DISTINCT views.id) AS view_count, COUNT(DISTINCT clicks.id) AS click_count
FROM users
INNER JOIN ads ON ads.`user_id` = users.`id`
LEFT JOIN views ON ads.id = views.`ad_id`
LEFT JOIN clicks ON ads.id = clicks.`ad_id`
WHERE users.`id` = 1
GROUP BY ads.`id`
ORDER BY `view_count` DESC
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句