Heim  >  Fragen und Antworten  >  Hauptteil

So fügen Sie mithilfe einer gespeicherten Prozedur Daten aus mehreren verschachtelten Listen in mehrere Zeilen der Datenbank ein

<p>Ich habe eine MySql-Datenbanktabelle wie unten gezeigt: </p> <h2>id |. item_id |. <p>In dieser Tabelle wird sprachbasierter Text gespeichert, der für verschiedene Seiten in einer Webanwendung verwendet wird. Ich habe Text für mehrere Sprachen und mehrere Seiten übersetzt und in einer JSON-Datei im folgenden Format gespeichert: </p> <pre class="brush:php;toolbar:false;">[ ["home","fr",1,"Französischer Text, Element 1"] ["home","fr",2,"Französischer Text, Element 2"] ["home","fr",3,"Französischer Text Punkt 3"] ["home","fr",4,"Französischer Text Punkt 4"] ["home","fr",5,"French text item 5"] ]</pre> <p>Jedes JSON-Dokument enthält Daten für eine bestimmte Sprache und eine bestimmte Webseite. </p> <p>Ich muss viele Daten einfügen und versuche, eine effiziente Möglichkeit zu finden, diese Daten meiner Datenbank hinzuzufügen. Ich gehe davon aus, dass die Verwendung einer gespeicherten Prozedur der beste Weg ist, aber ich kann keine Tutorials finden, die das Durchlaufen eines solchen Arrays und das Einfügen behandeln. </p> <p>Ist es möglich, ein solches Array an eine gespeicherte Prozedur zu übergeben und es zu durchlaufen und Zeile für Zeile einzufügen? </p> <p>Jede Hilfe wäre sehr dankbar. </p>
P粉807471604P粉807471604407 Tage vor510

Antworte allen(1)Ich werde antworten

  • P粉676588738

    P粉6765887382023-08-15 13:06:06

    创建表test (id INT AUTO_INCREMENT PRIMARY KEY,
                       page_name VARCHAR(64),
                       language CHAR(2),
                       item_id INT,
                       item_text VARCHAR(255)
                       );
    SET @data := '
    [
        ["home","fr",1,"French text item 1"],
        ["home","fr",2,"French text item 2"],
        ["home","fr",3,"French text item 3"],
        ["home","fr",4,"French text item 4"],
        ["home","fr",5,"French text item 5"]
    ]
      ';
    INSERT INTO test (page_name, language, item_id, item_text)
    SELECT page_name, language, item_id, item_text
    FROM JSON_TABLE(@data,
                    '$[*]' COLUMNS ( page_name VARCHAR(64) PATH '$[0]',
                                     language CHAR(2) PATH '$[1]',
                                     item_id INT PATH '$[2]',
                                     item_text VARCHAR(255) PATH '$[3]'                                    
                                    )
                    ) jsontable;
    SELECT * FROM test;
    id page_name language item_id item_text
    1 home fr 1 French text item 1
    2 home fr 2 French text item 2
    3 home fr 3 French text item 3
    4 home fr 4 French text item 4
    5 home fr 5 French text item 5

    fiddle

    Antwort
    0
  • StornierenAntwort