SQL Error (1064)

Résolu/Fermé
Lemjid Messages postés 72 Date d'inscription mardi 26 février 2019 Statut Membre Dernière intervention 15 juillet 2021 - Modifié le 17 mai 2021 à 12:51
Lemjid Messages postés 72 Date d'inscription mardi 26 février 2019 Statut Membre Dernière intervention 15 juillet 2021 - 17 mai 2021 à 19:12
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 72 Date d'inscription mardi 26 février 2019 Statut Membre Dernière intervention 15 juillet 2021
17 mai 2021 à 15:37
quelqu'un a une idée ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
17 mai 2021 à 16:30
Oui
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
17 mai 2021 à 16:31
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 72 Date d'inscription mardi 26 février 2019 Statut Membre Dernière intervention 15 juillet 2021 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
17 mai 2021 à 16:48
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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Lemjid Messages postés 72 Date d'inscription mardi 26 février 2019 Statut Membre Dernière intervention 15 juillet 2021
17 mai 2021 à 17:06
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 72 Date d'inscription mardi 26 février 2019 Statut Membre Dernière intervention 15 juillet 2021 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
17 mai 2021 à 17:22
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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
17 mai 2021 à 17:26
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 72 Date d'inscription mardi 26 février 2019 Statut Membre Dernière intervention 15 juillet 2021
17 mai 2021 à 18:30
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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Lemjid Messages postés 72 Date d'inscription mardi 26 février 2019 Statut Membre Dernière intervention 15 juillet 2021
17 mai 2021 à 19:05
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 72 Date d'inscription mardi 26 février 2019 Statut Membre Dernière intervention 15 juillet 2021
17 mai 2021 à 19:12
il faut un simple cote :

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