2016-03-22 4 views
0

In meiner SQL-Datenbank ist eine Spalte mit Arrays. Jedes Array besteht aus vielen ArraysSQL-Array-Spalte; Kombiniere alle Arrays

[ "Wort", NUMBER]

wie die Beispiele $ rowOne, $ rowTwo, $ rowThree. Die Länge und die Wörter der Arrays können unterschiedlich sein. Ich habe viele Texte mit NLTK analysiert. Jetzt möchte ich alle Texte einer Kategorie kombinieren, um zum Beispiel die häufigsten Wörter einer Kategorie zu erhalten.

$ rowOne = [('Liebe', 14), ('lassen', 12), ('regen', 12), ('ja', 7), ('oh', 7), ('make', 5), ('happy', 3), ('dream', 3)];

$ rowTwo = [('la', 12), ('hoch', 10), ('lustig', 6), ('sonne', 6), ('zwei', 5), (' fly ', 5), (' one ', 5), (' bridge ', 4)];

$ rowThree = [('deal', 33), ('ya', 19), ('muss', 7), ('wissen', 6), ('ein anderer', 5), (' take ', 5), (' thrill ', 4), (' get ', 4)];

Das Ziel ist es, alle $ Reihen der Benutzer meines WebApp holen wollen, die oft durch die Anzahl bestellt Tausende von Zeilen und kombinieren alle Arrays zu einem $ result Array,

Mein Ansatz jetzt ist es, ein $ combinedArray zu erstellen und so lange Zeilen zu kombinieren, dass die Funktion combineTwoArrays ein rowArray in das $ combinedArray integriert. Aber ich bin sehr unzufrieden mit dieser Lösung und der Leistung, da das Array wächst und wächst ...

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

Ich hoffe, dass es eine bessere und schnellere Lösung ist ... !! :

Jede Zeile hat eine eindeutige Song-ID und ein besserer Ansatz könnte sein, eine neue Tabelle zu erstellen.

  • kann ich die Zeilen mit der
  • ID identifizieren
  • aber wie soll ich meine Array geteilt ...?!?! für jede Array-Position ('Liebe', 14) eine neue Spalte oder die Zahlen auch getrennt?

Ich habe versucht, eine SQLFiddle zu bauen, aber ich denke, es funktioniert nicht. SQLFiddle

+0

Verwendung verschmelzen für die Bezug auf http: // pHP.net – Xravn

+0

die bessere Lösung IMHO sollte nicht eine Spalten verwenden, um Arrays zu speichern, sondern erstellen Sie eine dedicate Tabelle und eine 'hasMany' Beziehung zwischen den Zweien – arilia

+0

Ich aktualisierte meine Frage und versuchte, eine SQLFiddle zu bauen, aber ich weiß nicht, ob Es funktioniert, weil ich es nie zuvor ... [SQLFiddle Link] (http://sqlfiddle.com/#!2/6e929) –

Antwort

0

Ich würde nicht stören, das Array zu verschmelzen. Es wäre schneller und einfacher, eine dedizierte Tabelle mit den Wörtern und Zählern zu erstellen, wie dies bereits erwähnt wurde. So würde die Tabelle wie folgt aussehen:

song_id word  word_count 
1   hello 20 
2   bye  3 

Dann können Sie die SQL-Funktion Summe verwenden wie folgt zusammenfassen:

select *, sum(word_count) 
from tablename 
group by word 

Wenn Sie durch Ihre Ergebnisse furhter filtern möchten beispielsweise nur auf der Suche für die Anzahl der Wörter in bestimmten Songs können Sie abfragen:

select * sum(word_count) 
from tablename 
where song_id in (<ids of the songs you want to search for>) 
group by word