【发布时间】:2011-03-18 14:39:30
【问题描述】:
我正在编写一个查询,该查询应返回每天/每月/每年多个用户的汇总小时数。
表格如下所示:
+------------------------------------------+
| id | entity_id | minutes | person | date |
+------------------------------------------+
输出应该的样子:
+----------------------------+
| year | month | day | hours |
| 2008 | 12 | 1 | 30 |
| 2008 | 12 | 2 | 40 |
| 2008 | 12 | 3 | 23 |
+----------------------------+
相反,hours 通常更多是由于left join 引起的返回行。
问题是我需要根据链接到相应实体的标签来查询这个表。当我加入这两个表(提供链接的tag_entity 和提供实际标签名称的tags)时,我的SUM() 不再有效,因为返回的结果太多。
查询:
select
date_format(from_unixtime(date), '%Y-%m-%d') as myDate,
ROUND(SUM(time) / 60,1) as hours
from time h
left join tag_entity te on te.entity_id = h.entity_id
left join tags t on t.tag_id = te.tag_id
where (t.tag_name NOT IN ('foo', 'bar', 'baz') OR t.tag_name IS NULL)
group by
myDate
order by
hours DESC, myDate ASC
我该如何解决这个问题?
编辑:
这是tag 和tag_entity 的架构:
Tag:
+----------+-------------+
| Field | Type |
+----------+-------------+
| tag_id | int(11) |
| tag_name | varchar(50) |
+----------+-------------+
还有tag_entity:
+-----------+---------+
| Field | Type |
+-----------+---------+
| id | int(11) |
| tag_id | int(11) |
| entity_id | int(11) |
+-----------+---------+
【问题讨论】:
-
也许我还没有喝足够的咖啡,但我在推断您的架构时遇到了麻烦。您能否发布标签和 tag_entity 架构的相关部分?另外,在哪个表中定义了“日期”和“时间”?
-
@Andrew 感谢您的回复。我添加了模式。
date和time在我的time表中。 -
您选择
from t并执行left join tags t- 语法错误。你忘了输入主表名吗? -
@Marc 哎呀。贴出查询稍作调整,原版不会出现此问题。将在此示例中修复。
-
您想要没有标签之一的实体('foo'、'bar'、'baz'),还是想要包含除 ('foo'、'bar' 之外的标签的实体,“巴兹”)?如果实体 1 有标签 'foo' 和标签 'me',是否应该包括在内?