У меня есть два searches
таблиц и recommended_searches
. Оба имеют два столбца id
и keyword
таблица поиска
id | keyword
1 | one
2 | two
3 | one
4 | one
5 | two
6 | one
Рекомендуемая таблица
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
для recommended_search. Это значит, что я могу 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
);
Поместите подсчеты в разные столбцы в двух подзапросах.
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'
То, что вы хотите, это не СОЮЗ, вы хотите присоединиться к ним.
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 ...
Это объединит два запроса и даст для них счет отдельно. В зависимости от ваших требований тип соединения может быть другим.