So fügen Sie mithilfe einer gespeicherten Prozedur Daten aus mehreren verschachtelten Listen in mehrere Zeilen der Datenbank ein
P粉807471604
P粉807471604 2023-08-14 19:11:53
0
1
613
<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粉807471604
P粉807471604

Antworte allen(1)
P粉676588738
创建表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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage