Взрываться и считать в SQL - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть столбец в табличных представлениях: 165,75,44,458,458,42,45 Этот столбец содержит user_ids, которые просматривали ссылку.Я хочу взорвать его через запятую и посчитать идентификаторы

Я пробовал это, но он учитывает только все символы.

SQL:

SELECT LENGTH(views) FROM questions WHERE question_id=1;

Это PHPверсия, которую я хочу сделать в SQL

$viewers_ids  = "165,75,44,458,458,42,45";
$num_of_views = count(array_filter(explode(",", $viewers_ids)));

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Попробовал наоборот, т.е. заменить все символы, кроме ,

     Select  
      Length(REGEXP_REPLACE
      (views,'[^\,]*',''))+1 from
         table 
0 голосов
/ 27 февраля 2019

Моя немедленная реакция заключается в том, что структура вашей таблицы должна измениться - я ожидаю, что будет еще одна таблица, которая объединит ссылки на вопросы и user_ids с, возможно, значением "visit_id", и использует visit_id в качестве внешнего ключа в таблице представлений.

Моя вторая реакция заключается в том, что это идеальная проблема для утилиты оболочки - может быть, sed /, / / ​​g, а затем wc -w или небольшой скрипт awk.

Чтобы сделать это в SQL, яможет попытаться выяснить, как посчитать количество запятых, и добавить один.Этот ответ дает вам функцию, которая даст вам число запятых, заменив их на «», а затем вычтя длину из длины неизмененного поля: Подсчитать количество вхождений строки в поле VARCHAR?

0 голосов
/ 27 февраля 2019

Вы можете считать запятые:

select 1 + length(views) - length(replace(views, ',', ''))

Тем не менее, вы должны исправить свою структуру данных.Вы не должны хранить несколько числовых идентификаторов в строковом столбце - это просто неправильно во многих отношениях.Вы должны использовать таблицу соединений / связей.

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