2014-09-16 3 views
0

У меня есть две таблицы (теги и карты тегов):Mysql | Граф теги

Тэги:

id text 
1 tag1 
2 tag2 
3 tag3 

Тэг карта:

tag_id question_id 
1  1 
1  2 
1  3 
1  4 
2  5 
3  6 

Я хотел бы получить результаты, как в приведенной ниже таблице:

id text count 
1 tag1 4 
2 tag2 1 
3 tag3 1 

Мой запрос:

SELECT 
    t.id, 
    t.text 
FROM 
    `#__tags` AS t 

Как я могу изменить свой запрос, чтобы возвращать счет. Спасибо!

ответ

2

Использование ниже запроса:

SELECT t1.id, 
     t1.text, 
     count(t2.question_id) AS COUNT 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON (t1.id=t2.tag_id) 
GROUP BY t1.id; 

SQL Fiddle Demo

0

Вы можете достичь этого, объединив индивидуальные идентификаторы таблицы карт, а затем подсчитав количество строк в каждой группе. Edit: oh, и offcourse вам нужно отфильтровать строки, которые не принадлежат декартовому продукту, что объединение двух таблиц генерируется путем включения where-clause.

SELECT 
    t.id, 
    t.text, 
    COUNT(tm.tag_id) AS count 
FROM 
    `#__tags` AS t, 
    `tag_map` AS tm 
WHERE t.id = tm.tag_id 
GROUP BY 
    tm.tag_id 
0
SELECT t1.id, 
     t1.text, 
     count(t2.tag_id) AS `count` 
FROM tag t1 
LEFT JOIN tag_map t2 ON t1.id=t2.tag_id 
GROUP BY t1.id; 
Смежные вопросы