MYSQL выберите запрос с использованием счетчика (*) - PullRequest
3 голосов
/ 29 марта 2012

У меня проблема с запросом выбора в 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 ]

2 голосов
/ 29 марта 2012

Теперь, когда вы более подробно остановились на том, чего на самом деле хотите достичь, можно заметить, что проблема намного сложнее.Вы на самом деле хотите, чтобы все комбинации 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
0 голосов
/ 29 марта 2012

Не уверен, но вы этого хотите?

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...