我有两张表searches
和recommended_searches
。两者都有两列id
和keyword
搜索表
id | keyword
1 | one
2 | two
3 | one
4 | one
5 | two
6 | one
recommended_searches table
id | key
1 | two
2 | two
3 | one
4 | two
5 | two
6 | one
我使用此查询返回搜索表中每个关键字的计数
SELECT keyword, count(*) as cnt FROM searches GROUP BY keyword ORDER by cnt DESC
以及此推荐
的查询SELECT keyword, count(*) as cnt FROM recommended_searches GROUP BY keyword ORDER by cnt DESC
我希望在这两个表上按键分组,但搜索表为cnt
,推荐搜索为recommended_cnt
。这是我可以根据表格类型进行ORDER BY,例如按推荐搜索排序。
SELECT keyword, count(*) as cnt FROM searches
UNION ALL
SELECT keyword, count(*) as recommended_cnt FROM recommended_searches
GROUP BY keyword ORDER by recommended_cnt DESC
如何同时返回cnt
和recommended_cnt
?我试过上面而不工作。
我想要一个像
这样的结果Array(
[keyword] => one
[cnt] => 4
[recommended_cnt] => 2
);
Array(
[keyword] => two
[cnt] => 2
[recommended_cnt] => 4
);
答案 0 :(得分:2)
将计数放在两个子查询中的不同列中。
SELECT `key`, MAX(cnt) AS cnt, MAX(recommended_cnt) AS recommended_cnt
FROM (
SELECT `keyword` AS `key`, COUNT(*) AS cnt, 0 AS recommended_cnt
FROM searches
GROUP BY `key`
UNION ALL
SELECT `key`, 0 AS cnt, COUNT(*) AS recommended_cnt
FROM recommended_searches
GROUP BY `key`
) AS x
GROUP BY `key`
答案 1 :(得分:0)
你想要的不是UNION,你想在它们之间加入。
SELECT a.keyword, a.cnt AS cnt, b.cnt AS cnt_recommended
FROM
(SELECT keyword, count(*) as cnt FROM searches GROUP BY keyword ORDER by cnt DESC) as a
LEFT OUTER JOIN
(SELECT keyword, count(*) as cnt FROM recommended_searches GROUP BY keyword ORDER by cnt DESC) as b
ON a.keyword = b.keyword
GROUP BY a.keyword
ORDER BY ...
这将加入两个查询并分别为它们提供计数。根据您的要求,连接类型可能不同。