Столбец массива SQL; Объединить все массивы

В моей 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;
}

Я надеюсь, что есть лучшее и более быстрое решение … !! : /

Каждая строка имеет уникальный идентификатор песни, и одним из лучших подходов может быть создание новой таблицы.

  • я могу идентифицировать строки с идентификатором
  • но как мне разделить мой массив …?!?! для каждой позиции массива («любовь», 14) новый столбец или числа также разделены?

Я пытался построить SQLFiddle, но я думаю, что он не работает. SQLFiddle

0

Решение

Я бы не стал объединять массив.
Было бы быстрее и проще добиться создания отдельной таблицы со словами и счетами, как уже упоминалась Арилия.
Таким образом, таблица будет выглядеть примерно так:

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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]