MySQL, Нахождение каждой частоты строки / слова в столбце - PullRequest
0 голосов
/ 26 июня 2018

Я хочу найти каждую частоту слова в столбце, используя только MySQL (если это возможно).Например:

Таблица:

id message
1  I want to eat pizza
2  I wanted chocolates
3  He doesn't like me

Запрос: ???

Результат:

Частота слова

I   2 
want 1
to 1
eat 1
pizza 1
wanted 1

и т.д ..

Возможно ли это?Если да, пожалуйста, помогите, спасибо

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вот пример php.Вам, вероятно, придется немного его настроить.

Предположим, у вас есть таблица word_frequency с уникальным столбцом word и целым числом для count.Кроме того, это подвержено внедрению SQL, поэтому вы должны быть осторожны.Но это должно начать вас.

<?php
$con=mysqli_connect("localhost","my_user","my_password","my_db");
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$results = mysqli_query($con,"SELECT message FROM table1");
while($row = $results->fetch_assoc()) {
   $words = explode(" ", $row['message']);
   foreach ($words as $word) {
      mysqli_query($con,"INSERT INTO word_frequency (`word`,`count`) VALUES ('$word',1) ON DUPLICATE KEY UPDATE `count`=`count`+1;");
   }
}

mysqli_close($con);
0 голосов
/ 26 июня 2018

Вам нужно разделить данные.Это боль:

select substring_index(substring_index(message, ' ', n.n), ' ', -1) as word,
       count(*) 
from (select 1 as n union all select 2 union all select 3 union all
      select 4 union all select 5
     ) n join
     t
     on n.n <= 1 + length(message) - length(replace(message, ' ', ''))
group by word;

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

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