MySQL: считать значения, разделенные запятыми, из поля - PullRequest
1 голос
/ 21 июня 2020

Это может показаться немного глупым, но у меня нет большого опыта в Mysql и вещах, связанных с базами данных.

У меня есть таблица с именами сообщений и поле (Теги). Ниже приведены примеры данных.

ID, Title,           Tags
1   Friend Title       Friend, School, City
2   College            College, City
3   Work               Work, City, Friend

Теги разделены запятыми.

Мне нужно получить количество этих тегов. Я ожидаю

School - 1
City - 3
College - 1
Work - 1

чего-то вроде этого.

Я знаю, прежде чем задать вопрос, нам нужно показать код или запрос, но я не знаю, с чего начать. Я не ищу полного решения.

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

Изменить По совету Forpas у меня есть другая таблица, содержащая имя тегов. Это выглядит так, как показано ниже.

Tagid  Tag      active
1      School    0
2      College   0
3      City      0
4      Home      0
5      Hotel     0

Ответы [ 3 ]

1 голос
/ 21 июня 2020

Присоединяйтесь к таблицам и объединяйте:

select t.tag, count(p.id) counter
from tags t inner join posts p
on find_in_set(t.tag, p.tags)
group by t.tag

Функция find_in_set(), используемая в предложении ON, будет работать, если в столбце нет пробелов после запятых tags таблицы posts. Если есть пробелы, то для их удаления необходимо использовать replace().

См. Демонстрацию . Результатов:

| tag     | counter |
| ------- | ------- |
| City    | 3       |
| College | 1       |
| School  | 1       |
| Work    | 1       |
1 голос
/ 21 июня 2020

Использование WITH , работает только в Mysql8.0 +:

with tags as (
 select 'School' as tag union 
 select 'City' union 
 select 'College' union 
 select 'Work') 
select tag, count(*) from (
  select tag 
  from tags
  left join posts on instr(posts.tags,tags.tag)>0
) x
group by tag
;
0 голосов
/ 21 июня 2020

В зависимости от того, сколько у вас тегов, если у вас их всего несколько, вы можете просто создать целочисленную переменную для каждого из них, а затем создать кучу операторов if, которые добавят 1 к переменной, имеющей имя тега.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...