0

我有一个复杂的问题。

我有一个查询,它结合了几个表中的数据。例如:

traffic: id, traffic_source_id, first_hit_date
goals: id, goal_type, goal_date, goal_value
traffic_sources: id, source_name

目标类型可以是“联系表格”、“演示下载”、“购买”目标值是数字。并显示用户在同一日期(天)达到目标的次数。

我试图为每个 traffic_id 显示一行,然后为这个 traffic_id 总结每个目标。当用户第一次来时,他/她会得到一个与他在一起的流量 ID(cookie)。例如,他/她可以在第一个命中日期后一周达到一个目标,然后在 2 天后达到另一个目标。

我希望能够从 date > to date 查询并显示该特定范围内目标的正确总和值。当我尝试使用 SUM(CASE WHEN ...) 时,我不能只对目标表的范围求和。

示例: 流量 从:2 月 1 日到 2 月 28 日

3 | google adwords | 0 contact | 1 demo download | 1 purchase
4 | facebook       | 1 contact | 3 demo download | 3 purchase

但是当我想将范围从 1-feb 更改为 14-feb

3 | google adwords | 0 contact | 1 demo download | 0 purchase
4 | facebook       | 0 contact | 2 demo download | 2 purchase

希望我足够清楚...

任何建议将不胜感激。


更新:查询我现在拥有的示例:

SELECT traffic.traffic_id as original_traffic_id hit_date, referrer, referrer_url, keyword, ip,
SUM(CASE goals.goal_type WHEN 'Contact' THEN 1 ELSE 0 END) goal_contact,
SUM(CASE goals.goal_type WHEN 'Download' THEN 1 ELSE 0 END) goal_download,
SUM(CASE goals.goal_type WHEN 'Signup' THEN 1 ELSE 0 END) goal_signup,
SUM(CASE goals.goal_type WHEN 'Purchase' THEN 1 ELSE 0 END) goal_purchase
FROM traffic
LEFT JOIN goals ON goals.traffic_id = traffic.traffic_id
WHERE traffic.traffic_id=100 AND hit_date >= '$from_date' AND hit_date <= '$to_date'

(其中 $from_date 和 $to_date 是 mysql 日期格式)

(这不是真正的查询,因为原始查询要大得多,并且包括大约 7 个加入的表)此查询实际上汇总了所有目标,而不必输入 cound 目标日期。我希望能够将 SUM 限制在 $from_date 和 $to_date 的范围内

希望它更清楚一点。

4

1 回答 1

0

我还没有这个问题的答案,但我所做的是在第一个查询之前用另一个查询来总结所有目标。数组看起来像$goals_array[traffic_id][goal_type] -> value

在循环主 sql 时,只需从 $goals_array 中获取值。它工作得很快,尽管我希望在一个查询中做到这一点,但现在还可以。

于 2012-04-18T07:25:33.473 回答