【发布时间】:2021-02-22 16:58:23
【问题描述】:
由于多个 UNION ALL,我的查询变得非常庞大,任何人都可以帮我减少它。实际上有 300 多个 UNION ALL。
SELECT keywords,
COUNT(i.postId) as Posts,
SUM(i.interactions) as Interactions,
GROUP_CONCAT(DISTINCT i.users) as Users
FROM (
SELECT 'keyword1' as keywords,
`postId`,
`interactions`,
( SELECT displayName FROM profile WHERE id=userID LIMIT 1 ) as users
FROM `posts`
WHERE `content` REGEXP 'keyword1'
AND created BETWEEN '2021-01-01' AND '2021-02-19'
AND userID IN (147483,166451,166467)
UNION ALL
SELECT 'keyword2' as keywords,
`postId`,
`interactions`,
( SELECT displayName FROM profile WHERE id=userID LIMIT 1 ) as users
FROM `posts`
WHERE `content` REGEXP 'keyword2'
AND created BETWEEN '2021-01-01' AND '2021-02-19'
AND userID IN (147483,166451,166467)
UNION ALL
SELECT 'keyword3' as keywords,
`postId`,
`interactions`,
( SELECT displayName FROM profile WHERE id=userID LIMIT 1 ) as users
FROM `posts`
WHERE `content` REGEXP 'keyword3'
AND created BETWEEN '2021-01-01' AND '2021-02-19'
AND userID IN (147483,166451,166467)
) i
GROUP BY keywords
【问题讨论】:
-
修复您的数据模型,以便将值存储在行中而不是列中。
-
一个糟糕的数据结构可以对您的代码造成什么影响的完美示例。
-
select version();显示什么? -
我不理解这些批评;这似乎不是行而不是列的情况;这只是尝试匹配多个关键字并报告匹配的关键字和匹配频率。 @GordonLinoff 你能解释一下吗?也许我只是忽略了你所看到的一切
-
您能向我们展示您的数据模型并解释您想用这个查询做什么吗?
标签: mysql sql regex datetime union-all