MySQL - считая с HABTM отношениями

0

У меня есть 3 таблицы: "открытки", "теги" и "картотеки", где теги HABTM карт

Вопрос: Какой запрос выполнить в таблице "теги", чтобы подсчитать количество связанных строк "карт"?

Я ищу что-то вроде этого:

tags.name | count
----------+------
cricket   |  15          (15 cards are tagged as 'cricket')
soccer    |  23
football  |  12
  • 1
    обычно это называется «многие ко многим». «HABTM» является термином, популярным в Rails / CakePHP.
Теги:
has-and-belongs-to-many

2 ответа

0

Если вы хотите только те теги, у которых есть хотя бы одна карта:

select tags.name, count(cardstags.tag_id) from tags inner join cardstags on tags.id=cardstags.tag_id group by tags.id;

Чтобы включить теги без карточек, используйте левое соединение вместо внутреннего соединения.

  • 0
    этот тоже не тот. вам нужно сгруппировать по tags.name для правильного результата.
  • 0
    нет, предположительно, если у вас разные идентификаторы тегов с повторяющимися именами, вам нужны отдельные результаты. и если у вас нет повторяющихся имен, группировка по tags.id эквивалентна группировке по tags.name.
Показать ещё 7 комментариев
0
select tags.name, count(*) from tags join cardstags 
 on tags.id=cardstags.tag_id group by tags.name
  • 0
    на 5.0.75 я получаю: ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '*) из тегов join cardstags
  • 0
    только что исправлено, mysql не хочет "cardstags. *", попробуйте еще раз.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню