Comment insérer des données de plusieurs listes imbriquées dans plusieurs lignes de la base de données à l'aide d'une procédure stockée
P粉807471604
P粉807471604 2023-08-14 19:11:53
0
1
583
<p>J'ai une table de base de données MySql comme indiqué ci-dessous : </p> <h2>id | nom_page | langue | item_id | item_text</h2> <p>Ce tableau stocke le texte basé sur la langue utilisé pour différentes pages d'une application Web. J'ai traduit du texte dans plusieurs langues et plusieurs pages, stocké dans un fichier JSON au format suivant : </p> <pre class="brush:php;toolbar:false;">[ ["home","fr",1,"élément de texte français 1"] ["home","fr",2,"texte français élément 2"] ["home","fr",3,"texte français élément 3"] ["home","fr",4,"texte français élément 4"] ["home","fr",5,"texte français élément 5"] ]≪/pré> <p>Chaque document JSON contient des données pour une langue spécifique et une page Web spécifique. </p> <p>J'ai beaucoup de données à insérer et j'essaie de trouver un moyen efficace d'ajouter ces données à ma base de données. Je suppose que l'utilisation d'une procédure stockée est le meilleur moyen, mais je ne trouve aucun didacticiel traitant du parcours en boucle dans un tableau comme celui-ci et de l'insertion. </p> <p>Est-il possible de transmettre un tel tableau à une procédure stockée et de le parcourir en boucle, en insérant ligne par ligne ? </p> <p>Toute aide serait grandement appréciée. </p>
P粉807471604
P粉807471604

répondre à tous(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 nom_page langue item_id item_text
1 maison fr 1 Article de texte français 1
2 maison fr 2 Article de texte français 2
3 maison fr 3 Article de texte français 3
4 maison fr 4 Article de texte français 4
5 maison fr 5 Article de texte français 5

violon

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal