SQL Error (1064)
Résolu
j'ai la table gs_object (date, lat,lng,params) dont :
params de type : Varchar et non plus JSON
{"io240":"0","io80":"0","io67":"4043","io68":"0","io241":"60502","io199":"0"}
Version Mysql : 5.6.12
Pour lire io240 j'ai fait : SELECT params->'$.io240 ' FROM gs_object ;
SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '>'$.io240'
Comment je peut lire io240 ?
params de type : Varchar et non plus JSON
{"io240":"0","io80":"0","io67":"4043","io68":"0","io241":"60502","io199":"0"}
Version Mysql : 5.6.12
Pour lire io240 j'ai fait : SELECT params->'$.io240 ' FROM gs_object ;
SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '>'$.io240'
Comment je peut lire io240 ?
3 réponses
-
quelqu'un a une idée ?
-
-
Modérateur@jordane45En tout cas ça ne se fera pas via une requête SQL, mais dans le langage de programmation que tu utilises afin de convertir la string en objet json afin d'en récupérer le contenu.
-
@jordane45Non je doit récupérer les valeurs via requête SQL car je doit faire l'insertion dans une autre table.
-
Modérateur@LemjidAh je n'avais pas bien compris ta question.
Donc, dans la bdd, tu as un champ de type varchar (le champs Params ) qui contient une string qui représente un JSON.
As tu essayé de faire un CAST de la colonne dans ta requête et utiliser ou sous requête ?
Un truc du genreSELECT T.jsonparams->'$.io240 ' FROM ( SELECT CAST(params as JSON) as jsonparams FROM gs_object ) T ;
Voir la doc pour manipuler les JSON si besoin
https://dev.mysql.com/doc/refman/8.0/en/json.html -
@jordane45Toujours le meme erreur : La version de Mysql est 5.6.12 qui n'accepte pas JSON .
/* SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '>'$.io240'
FROM (SELECT CAST(params as JS' at line 1 */
-
-
ModérateurAh ben si tu ne nous donnes pas toutes les infos dès le départ......... :-(
Donc, à part faire une fonction personnalisée, le format JSON n'est en effet pas dispo avant la version 5.7
Je t'invite à regarder cette discussion :
https://stackoverflow.com/questions/37816269/how-to-get-values-from-mysql5-6-column-if-that-contains-json-document-as-strin
#jsonanalytic function DELIMITER $$ DROP FUNCTION IF EXISTS `json_extract_c`$$ CREATE FUNCTION `json_extract_c`( details TEXT, required_field VARCHAR (255) ) RETURNS TEXT CHARSET latin1 BEGIN SET details = SUBSTRING_INDEX(details, "{", -1); SET details = SUBSTRING_INDEX(details, "}", 1); RETURN TRIM( BOTH '"' FROM SUBSTRING_INDEX( SUBSTRING_INDEX( SUBSTRING_INDEX( details, CONCAT( '"', SUBSTRING_INDEX(required_field,'$.', -1), '":' ), -1 ), ',"', 1 ), ':', -1 ) ) ; END$$ DELIMITER ;-
Oui c'est ca , j'ai le résultat avec : SELECT json_extract_c (params,"$.io240") FROM gs_object;
J'utilise PHP donc pour faire insert from select j'ai fait comme ca :
$sql = "INSERT INTO gs_dat (io1)
SELECT
(json_extract_c (gs.params,"$.io1")) io1
FROM gs_objects gs;
qui retourne : ( ! ) Parse error: syntax error, unexpected '$' in -
Modérateur@LemjidTu as utilisé les doubles côte à l'intérieur d'une chaîne qui est elle-même entre double quote...
-
-
il faut un simple cote :
$sql = "INSERT INTO gs_dat (io1)
SELECT
(json_extract_c (gs.params,'$.io1')) io1
FROM gs_objects gs;