SQL Error (1064)

Résolu
Lemjid Messages postés 71 Date d'inscription   Statut Membre Dernière intervention   -  
Lemjid Messages postés 71 Date d'inscription   Statut Membre Dernière intervention   -
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 ?

3 réponses

Lemjid Messages postés 71 Date d'inscription   Statut Membre Dernière intervention  
 
quelqu'un a une idée ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Oui
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
En 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.
0
Lemjid Messages postés 71 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Non je doit récupérer les valeurs via requête SQL car je doit faire l'insertion dans une autre table.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > Lemjid Messages postés 71 Date d'inscription   Statut Membre Dernière intervention  
 
Ah 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 genre
SELECT 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
0
Lemjid Messages postés 71 Date d'inscription   Statut Membre Dernière intervention   > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Toujours 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 */
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Ah 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 ;
0
Lemjid Messages postés 71 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > Lemjid Messages postés 71 Date d'inscription   Statut Membre Dernière intervention  
 
Tu as utilisé les doubles côte à l'intérieur d'une chaîne qui est elle-même entre double quote...
0
Lemjid Messages postés 71 Date d'inscription   Statut Membre Dernière intervention  
 
il faut un simple cote :

$sql = "INSERT INTO gs_dat (io1)
SELECT
(json_extract_c (gs.params,'$.io1')) io1
FROM gs_objects gs;
0