我有一个数据库表,每行代表我要为查询提取的一列数据。我的表是:
tracked_pages
page_id | page_url | page_name
-------------------------------------
1 | users.php | Users
2 | auctions.php | Auctions
3 | receipts.php | Receipts
基本上,我有另一个表,用于跟踪登录用户每次访问页面的时间。但这三页是我现在真正感兴趣的唯一一页。
这不是我的实际查询,只是为了展示如果我只是手写它我会如何编写它,我会做类似的事情:
Select user.id, count(clicks1.id) As user_clicks, count(clicks2.id) As auction_clicks, count(clicks3.id) As receipt_clicks
From users
Left Join clicks As clicks1 On (users.id = clicks1.id And clicks1.page = 'users.php')
Left Join clicks As clicks2 On (users.id = clicks2.id And clicks2.page = 'auctions.php')
Left Join clicks As clicks3 On (users.id = clicks3.id And clicks.page = 'receipts.php')
Group By users.id
所以我希望输出类似于:
Output
user_id | user_clicks | auction_clicks | receipt_clicks
-------------------------------------------------------
1 | 54 | 16 | 16
2 | 27 | 22 | 12
3 | 32 | 24 | 38
但是,我希望查询从数据库中提取每一列,而不必手动连接同一个表。原因是因为tracked_pages
表可以通过管理区域进行更新,我不希望每次想要跟踪不同的页面时都要更新代码。
我知道我可以执行一个查询来获取用户,然后当我循环执行时,我可以执行另一个查询来获取页面计数,但我真的想让它只是一个查询。
任何帮助都将不胜感激。
谢谢, 詹姆斯