2015-05-07 70 views
0
列数和组

所以我有2个表:MySQL的 - 从2个表中选择,由

页:

id page visit_id 
1  6   65 
2  7   65 
3  2   66 
4  10  67 

访问:

id flipbook  
65  april   
66  april   
67  may 

我要回多少页被查看为每个动画书:

april: 3 
may: 1 

我的查询看起来是这样的:

"SELECT a.flipbook, (SELECT count(b.page) from pages b WHERE a.id = b.visit_id) AS total FROM visits a GROUP BY a.flipbook" 

但它返回:

april: 1 
may: 1 

因为它只有从四月,我们参观了一个页面的最后一次访问。

有什么想法?

回答

2
select a.flipbook, count(*) 
    from visits a 
    inner join pages p 
     on a.id = p.visit_id 
    group by a.flipbook 

不需要子查询 - 这只是一个基本的连接和聚合。

+0

谢谢,它的工作原理。 – Speedwheel

+0

@Speedwheel没问题,随时接受答案:) –

+0

9分钟前?但我只是看到它:-( – Strawberry

1

尝试使用这样的查询

SELECT a.flipbook,COUNT(*) AS total 
FROM visits a 
LEFT JOIN pages b ON a.id = b.visit_id 
GROUP BY a.flipbook 
1

嗯,有点偏离轨道有...

SELECT v.flipbook 
    , COUNT(*) pages_viewed 
    FROM visits v 
    JOIN pages p 
    ON visit_id = v.id 
GROUP 
    BY v.flipbook; 

使用外连接,如果你想“0”的结果也算别的东西。

1

你可以尝试使用这样的查询:

SELECT v.flipbook, COUNT(*) AS total 
FROM pages p 
LEFT JOIN visits v ON p.visit_id=v.id 
GROUP BY v.flipbook