sql >> データベース >  >> RDS >> Mysql

特定の値のMySQLでJsonキーを取得する

    私が言ったように、ここでテキストベースのキーを扱っているので、MySQLでJSONを解析するのは難しいかもしれません。
    したがって、JSON_KEYS()を使用する必要があります それらを数値ジェネレーターと組み合わせて取得するには、動的JSONパスが生成され、JSON_EXTRACT()で使用されます。

    MySQLの8関数JSON_TABLE() はるかに簡単になります。

    クエリ

     SELECT
      JSON_UNQUOTE(
        JSON_EXTRACT(json ,  CONCAT('$.', SUBSTRING_INDEX(
           SUBSTRING_INDEX(json_parsed, ',', number_generator.number)
           , ','
           , -1
         ), '.name'))) AS name
    FROM (
    
      SELECT 
       @row := @row + 1 AS number
      FROM (
        SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION   SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
      ) row1
      CROSS JOIN (
        SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION  SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
      ) row2
      CROSS JOIN (
        SELECT @row := 0 
      ) init_user_params 
    ) AS number_generator
    CROSS JOIN (
    
        SELECT  
            SUBSTRING(json_keys, 2, json_keys_length - 2) AS json_parsed
          , json_keys
          , json
          , JSON_LENGTH(json_keys) AS json_array_length                       
        FROM (
           SELECT 
                JSON_KEYS(record.json) AS json_keys
              , json
              , LENGTH(JSON_KEYS(record.json)) AS json_keys_length
           FROM (
              SELECT 
                 '{
                    "Intitule": {
                       "name": "Intitule de la formation",
                       "stats": false,
                       "is_array": false,
                       "is_filter": true,
                       "chart": "pie",
                       "col": "6"
                    },
                    "Fin": {
                        "name": "Date de fin",
                        "stats": false,
                        "is_array": false,
                        "is_filter": false,
                        "chart": "pie",
                        "col": "6"
                        }
                    }' AS json
              FROM  
                DUAL  
           ) AS record                     
        ) AS json_information  
      ) AS json_init
    WHERE
       number_generator.number BETWEEN 0 AND json_array_length
     AND
       JSON_EXTRACT(json ,  CONCAT('$.', SUBSTRING_INDEX(
         SUBSTRING_INDEX(json_parsed, ',', number_generator.number)
         , ','
         , -1
       ), '.is_filter')) = true 
    

    結果

    | name                     |
    | ------------------------ |
    | Intitule de la formation |
    

    デモ を参照してください。



    1. ADO.netSqlTransactionはパフォーマンスを向上させます

    2. Debian 5のphpMyAdminでMySQLを管理する(Lenny)

    3. c3p0.testConnectionOnCheckout =trueを設定した後でも、MySQLへのデータベース接続がタイムアウトします

    4. 単一テーブル継承に参照整合性を適用するにはどうすればよいですか?