Maison > Questions et réponses > le corps du texte
C'est le code pour insérer json dans mon sql
function insert_ema($json){ $a= new Sql(); $b=$a->connection; $sql = "INSERT INTO ema (ema_ten) VALUES ('$json')"; if ($b->query($sql) === TRUE) { echo PHP_EOL." New record created successfully \n"; } else { echo PHP_EOL." Error: " . $sql . "<br>" . $b->error; } $b->close(); ;} insert_ema('{"firstName":"John", "lastName":"Doe","3":"Jo", "4":"Do"}'); +----------------------------------------------------------------+----+ | ema_ten | id | +----------------------------------------------------------------+----+ | {"3": "Jo", "4": "Do", "lastName": "Doe", "firstName": "John"} | 1 | | {"3": "Jo", "4": "Do", "lastName": "Doe", "firstName": "John"} | 2 | +----------------------------------------------------------------+----+
Le SQL enregistré ci-dessus est dans l'ordre inverse ! ! Comment puis-je le réparer
La raison pour laquelle je veux m'en tenir à l'ordre est que je veux pouvoir convertir le json en tableau et utiliser pop .
Je pense que MySQL devrait enregistrer le tableau et le trier pour ce problème.
P粉0900872282024-02-18 11:01:52
https://dev.mysql.com/doc/refman /8.0/en/json.html a dit :
Cela signifie que vous ne devez pas vous fier à un ordre de tri spécifique des clés dans l'objet JSON. Les tableaux JSON ont un ordre, mais pas les clés d'objet JSON.
Si les clés et les valeurs respectives d'un objet JSON sont les mêmes, elles sont égales quel que soit l'ordre :
mysql> select cast('{"firstName":"John", "lastName":"Doe","3":"Jo", "4":"Do"}' as json) = cast('{"3": "Jo", "4": "Do", "lastName": "Doe", "firstName": "John"}' as json) as is_equal; +----------+ | is_equal | +----------+ | 1 | +----------+
Répondez à votre commentaire :
Le point de l'exemple ci-dessus est que vous ne pouvez pas faire en sorte que MySQL stocke les clés dans l'ordre souhaité. L'implémentation JSON de MySQL ne fait pas cela. Il réorganise les clés d'objet JSON pour améliorer l'efficacité de la recherche. Vous n’avez pas votre mot à dire.
Les tableaux JSON peuvent être triés. Ainsi, la seule option pour préserver l’ordre est d’utiliser un tableau, où chaque élément du tableau est un objet avec une seule clé :
[{"firstName":"John"}, {"lastName":"Doe"}, {"3":"Jo"}, {"4":"Do"}]
Je sais que ce n'est pas ce que vous demandez, mais ce que vous demandez n'est pas possible dans MySQL.