MySQL, Нахождение каждой частоты строки / слова в столбце

0

Я хочу найти каждую частоту слов в столбце, используя только 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

так далее..

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

  • 0
    MySQL не имеет команды разделения строки. Я думаю, что это было бы гораздо лучше сделать на языке сценариев, таких как PHP. Однако это не совсем невозможно, если количество слов в строке остается очень маленьким.
  • 0
    @mankowitz как ты делаешь это в php? извините, я еще не достиг этого в php
Теги:

2 ответа

0
Лучший ответ

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

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;

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

  • 0
    Мне нужно время, чтобы понять код, но это сработало как по волшебству. большое спасибо!
  • 0
    Если я правильно читаю, вы должны предположить, что все сообщения состоят из 5 слов или меньше.
0

Вот пример 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
    Понял, это определенно поможет. Спасибо!

Ещё вопросы

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