MYSQL выберите запрос с помощью счетчика (*)
У меня есть проблема, касающаяся запроса выбора в MYSQL
у меня есть две разные таблицы, и я хочу получить определенный результат
я использовал метод COUNT, который дал мне только результаты (>=1)
Но на самом деле, я хочу использовать все подсчеты, включая ноль, как это сделать?
Мой запрос:
SELECT
first.subscriber_id,
second.tag_id,
COUNT(*)
FROM
content_hits first
JOIN content_tag second ON first.content_id=second.content_id
GROUP BY
second.Tag_id,first.Subscriber_id<br>
Первая таблица:Content_hits
CONTENT_ID SUBSCRIBER_ID
30 1
10 10
34 4
32 2
40 3
28 3
30 6
31 8
12 3
Вторая таблица:Content_tag
CONTENT_ID TAG_ID
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
11 2
12 2
13 2
14 2
Результат, но не полный Например:Subsrciber6 для tag_id=1 должен иметь счетчик (*)=0
subscriber_id tag_id COUNT(*)
1 1 4
2 1 7
3 1 2
4 1 1
5 1 3
7 1 2
8 1 1
9 1 1
10 1 3
1 2 2
2 2 3
3 2 2
2 ответа
Теперь, когда вы более подробно остановились на том, чего на самом деле хотите достичь, можно заметить, что проблема гораздо сложнее. Вы на самом деле хотите все комбинации subscriber_id
а также tag_id
, а затем посчитайте количество фактических записей в объединенной таблице продукта. гмм. Итак, здесь идет SQL:
SELECT combinations.tag_id,
combinations.subscriber_id,
-- correlated subquery to count the actual hits by tag/subscriber when joining
-- the two tables using content_id
(SELECT count(*)
FROM content_hits AS h
JOIN content_tag AS t ON h.content_id = t.content_id
WHERE h.subscriber_id = combinations.subscriber_id
AND t.tag_id = combinations.tag_id) as cnt
-- Create all combinations of tag/subscribers first, before counting anything
-- This will be necessary to have "zero-counts" for any combination of
-- tag/subscriber
FROM (
SELECT DISTINCT tag_id, subscriber_id
FROM content_tag
CROSS JOIN content_hits
) AS combinations
Не уверен, но ты этого хочешь?
SELECT first.subscriber_id, second.tag_id, COUNT(*) AS c
FROM content_hits first JOIN content_tag second ON first.content_id=second.content_id
GROUP BY second.Tag_id,first.Subscriber_id HAVING c = 0