【问题标题】:SQL Array Column; Combine all ArraysSQL 数组列;合并所有数组
【发布时间】:2016-03-22 13:30:36
【问题描述】:

在我的 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), ('one', 5), ('bridge', 4)];

$rowThree = [('deal', 33), ('ya', 19), ('gotta', 7), ('know', 6), ('another', 5), ('take ', 5), ('thrill', 4), ('get', 4)];

目的是获取我的 WebApp 的用户想要的所有 $rows,通常可能是数千行,并将所有数组组合成一个按 Number 排序的 $result 数组,

我现在的方法是构建一个 $combinedArray 和这么长的行来组合现有的函数 combineTwoArrays 将一个 rowArray 集成到 $combinedArray 中。 但是我对这个解决方案和性能非常不满意,因为数组越来越大......

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;
}

希望有更好更快的解决方案……!! :/

每一行都有一个唯一的歌曲 ID,一个更好的方法可能是创建一个新表。

  • 我可以用 id 识别行
  • 但是我应该如何拆分我的数组... ?!?!对于每个数组位置('love',14)一个新列还是数字也分开?

我尝试构建一个 SQLFiddle,但我认为它不起作用。 SQLFiddle

【问题讨论】:

  • 对该引用使用合并转到php.net
  • 更好的解决方案恕我直言,不应该使用列来存储数组,而是创建一个专用表和两者之间的hasMany 关系
  • 我更新了我的问题并尝试构建一个 SQLFiddle,但我不知道它是否有效,因为我之前从未使用过它...SQLFiddle Link

标签: php mysql arrays nltk cakephp-3.0


【解决方案1】:

我不会费心合并数组。 使用单词和计数创建一个专用表会更快、更容易,就像已经提到的 arilia 一样。 所以表格看起来像这样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 2021-02-10
    • 2015-10-15
    相关资源
    最近更新 更多