Я хочу найти каждую частоту слов в столбце, используя только 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
так далее..
Является ли это возможным? Если да, пожалуйста, помогите, спасибо
Вам нужно разбить данные. Это боль:
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;
Вышеприведенное предполагает, что все сообщения составляют пять слов или меньше. Вы можете увеличить число в первом подзапросе для более длинных сообщений.
Вот пример 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);