【问题标题】:mysql report join tables and Database structure issuemysql报告连接表和数据库结构问题
【发布时间】:2015-08-08 02:12:33
【问题描述】:

我正在尝试实现以下报告结果:

campaign_name   visits  leads   registrations
3333              3       0         0
direct            3       2         1
(null)            0       1         1
test              0       1         1

我有这个数据库结构,现在我很确定关系不正确。我和他们一起玩,但我做错了 http://sqlfiddle.com/#!9/451de/7

您的建议将不胜感激。

【问题讨论】:

  • 问题在于您的跟踪日期类似于(4 月跟踪的 5,26, 50),而其他表的相关条目(如潜在客户)具有不同的日期

标签: php mysql database-design database-schema


【解决方案1】:

试试这个。

SELECT `campaign_name`, 
   count(t.id) as visits, 
   count(l.id) as leads ,
   count(r.id) as registrations

FROM `trackings` t

   LEFT JOIN leads l ON t.`id` = l.`tracking_id` 
   LEFT JOIN registrations r ON t.`id` = r.`tracking_id`

WHERE t.created_at between '2015-04-01'
      AND '2015-05-31' 
      AND t.aff_id =5

GROUP BY `campaign_name`

ORDER BY visits DESC

由于日期问题,不是您要查找的内容。 跟踪表 身份证

6           2015-04-07 18:54:57
26          2015-04-13 11:06:13
50          2015-04-20 14:42:23

虽然领先

26         2015-05-13 11:07:09
50         2015-05-20 14:43:07

【讨论】:

  • 我相信我需要改变我的数据库结构,是多态关系吗?如果是这样,我应该如何处理它?结果应该是 pastie.org/private/bu38tbqvv2jl0ooujaoua 。独立获取每个日期范围内每个广告系列的所有操作。
  • 多态关系是处理复杂结构的最佳方法。有单独的表用于注册,潜在客户和跟踪,然后创建其他相关表lead_tracking,registration_tracking
  • 假设您推荐的数据库结构,结果查询会是什么样子?
【解决方案2】:

试试这个

mysql_query("select  campaign_name  , count(t.id) 
             as visits, count(l.id) as leads ,count(r.id) as registrations

from trackings t

left join leads as l
 on l.tracking_id =t.id

left join registrations as r
 on r.tracking_id =t.id

where t.created_at between '2015-04-01' AND '2015-05-31' and t.aff_id =5

group by campaign_name");

【讨论】:

  • Er Sonveer Singh 我试过了,但是您查询中的日期范围不正确应该介于 : '2015-05-01' AND '2015-05-31 之间,并且您的查询返回了相同的结果: sqlfiddle.com/#!9/451de/23
猜你喜欢
  • 2016-12-08
  • 1970-01-01
  • 2015-01-21
  • 2015-04-04
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
相关资源
最近更新 更多