我有一个带有 3 个表的 MySQL 数据库
Keywords
id, keyword, projects_id
Year
results_id*, jan, feb, mar, ..., nov, dec
Results
id, keywords_id*, country, user
star = foreign key
我需要找到项目 1 中存在的任何关键字产生的年度总量,也存在于项目 2,3 和 4 中,按国家和用户分组。
这就是我到目前为止所拥有的
SELECT SUM(y.january +
y.february +
...
y.december) AS 'sum',
r.country , r.user
FROM results r, year y
WHERE y.results_id = r.id
AND keywords_id IN(
SELECT DISTINCT k.id
FROM keywords k
JOIN keywords kk ON k.keyword = kk.keyword
WHERE k.projects_id = 1
AND kk.projects_id IN (2,3,4)
)
GROUP BY country, user;
我的逻辑是这样的:
- 使用 JOIN 查找属于项目 1 且也在项目 2、3、4 中的所有关键字的 ID。
- 然后找到包含任何关键字 id 的关键字 ID 条目的任何结果
- 最后将年表中的所有卷加在一起,并按国家和用户分组
我尝试了第一步的子查询(括号内的那个),它返回了 1700 多个关键字
但是当我在 30 分钟后尝试整个关键字时,我没有得到任何结果。
我如何重写查询以加快速度,或者如果我做错了什么?
非常感谢提前