Как разделить данные столбца SQL, разделенные запятой, на отдельные значения, а затем посчитать эти значения - PullRequest
0 голосов
/ 04 июля 2019

Я использую команду SQL в PHP для подсчета количества значений, вставленных в столбец с именем attack_type.Я хочу посчитать вхождение отдельных значений, таких как website defacement, во весь столбец таблицы.Но здесь столбец attack_type содержит разные значения, разделенные запятой, а счетчик обрабатывает данные всего столбца как строку.Ниже приведен мой текущий оператор SQL с его выводом

Я попытался взорвать print_r в PHP

SELECT attack_type, 
       count(*) as number 
FROM data_input_test 
GROUP BY attack_type

Вот вывод сгенерированного выше выражения:

https://drive.google.com/open?id=1TyRL_Mh0OOJWaCpFczxmBr34No9LUpzH

Но я хочу:

https://drive.google.com/open?id=1eeA_1TCER0WMpZwSkBDMzRtRa8xihbZd

и так далее.Вышеуказанный желаемый результат отредактирован, чтобы показать, что именно я хочу.

Другой ответ на stackoverflow и на других форумах либо не имеет значения, либо использует regrex или создание новой таблицы тем или иным способом.Чего я не хочу, так как мой хостинг имеет некоторые ограничения.Мой хостинг не обеспечивает создание триггеров, регрекс или создание временных таблиц

Ответы [ 3 ]

1 голос
/ 04 июля 2019

У меня может быть решение для этого, но я не знаю, как подать заявку здесь. Возможно здесь: https://www.periscopedata.com/blog/splitting-comma-separated-values-in-mysql

Пожалуйста, кто-нибудь объяснит мне, как применить то же самое здесь.

0 голосов
/ 07 июля 2019

Итак, я наконец-то поработал, чтобы выполнить свою работу, используя только выбор.Это работает, только если у вас есть конечный набор данных или, в частности, менее 64 значений.

  1. Измените тип данных столбца на тип 'set'.И введите свои установленные значения.
  2. Теперь используйте функции select, count, find_in_set и union для sql.
  3. Пример:
    union select 'Un-patched Vulnerable Software Exploitaion'as type, count(*) as number from data_input_test where find_in_set('Un-patched Vulnerable Software Exploitaion',attack_type)```
    

и так далее для всехваши ценности

Я знаю, что это не то, что вы должны делать, а, как говорят легенды, это работает ??

0 голосов
/ 04 июля 2019

Если вы просто хотите посчитать значения через запятую в строках, вы можете использовать:

SELECT SUM(LENGTH(attack_type) - LENGTH(replace(attack_type, ',', '')) +1) AS TotalCount
FROM table_name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...