В моей SQL-базе данных есть столбец с массивами. Каждый массив состоит из множества массивов
[ «Слово», NUMBER]
как примеры $ rowOne, $ rowTwo, $ rowThree. Длина и слова массивов могут быть разными. Я проанализировал много текстов с NLTK. Теперь я хочу объединить все тексты категории, чтобы получить, например, самые распространенные слова категории.
$ rowOne = [(‘love’, 14), (‘let’, 12), (‘rain’, 12), (‘yea’, 7), (‘oh’, 7), (‘make’, 5 ), («счастливый», 3), («сон», 3)];
$ rowTwo = [(‘la’, 12), (‘high’, 10), (‘fun’, 6), (‘sun’, 6), (‘two’, 5), (‘fly’, 5 ), («один», 5), («мост», 4)];
$ rowThree = [(‘сделка’, 33), («я», 19), («должен», 7), («знать», 6), («еще», 5), («взять», 5 ), («острые ощущения», 4), («получить», 4)];
Цель состоит в том, чтобы получить все $ строки, которые хочет пользователь моего WebApp, которые часто могут быть тысячами строк, и объединить все массивы в один массив $ result, упорядоченный по Number,
Мой подход теперь состоит в том, чтобы создать $ комбинированный массив и длинные строки, чтобы объединить существующую функцию combTwoArrays, интегрирующую один rowArray в $ комбинированный массив.
Но я очень недоволен этим решением и производительностью, потому что массив растет и растет …
function combineTwoArray ($combinedArray, $arrayToCombine)
{
$result = $combinedArray;
foreach ($combinedArray as $element) {
foreach ($arrayToCombine as $combineElement) {
if($element[0] == $combineElement[0]{
$number = $element[1] + $combineElement[1];
$word = $element[0];
$array = [$word,$number]
array_push($result, $array);
}
}
return $result;
}
Я надеюсь, что есть лучшее и более быстрое решение … !! : /
Каждая строка имеет уникальный идентификатор песни, и одним из лучших подходов может быть создание новой таблицы.
Я пытался построить SQLFiddle, но я думаю, что он не работает. SQLFiddle
Я бы не стал объединять массив.
Было бы быстрее и проще добиться создания отдельной таблицы со словами и счетами, как уже упоминалась Арилия.
Таким образом, таблица будет выглядеть примерно так:
song_id word word_count
1 hello 20
2 bye 3
Затем вы можете использовать функцию sql sum для суммирования следующим образом:
select *, sum(word_count)
from tablename
group by word
Если вы хотите дополнительно отфильтровать свои результаты, например, только по количеству слов в определенных песнях, вы можете запросить:
select * sum(word_count)
from tablename
where song_id in (<ids of the songs you want to search for>)
group by word
Других решений пока нет …