Mysql
 sql >> база данни >  >> RDS >> Mysql

Вземете различни стойности от MySQL JSON масив

Съжалявам за некромантиката, но се сблъсках с подобен проблем. Решението е:JSON_TABLE() наличен от MySQL 8.0.

Първо, обединете масивите в редове в едноредов единичен масив.

select concat('[',         -- start wrapping single array with opening bracket
    replace(
        replace(
            group_concat(vals),  -- group_concat arrays from rows
            ']', ''),            -- remove their opening brackets
        '[', ''),              -- remove their closing brackets
    ']') as json             -- finish wraping single array with closing bracket
from (
  select '[801, 751, 603, 753, 803]' as vals
  union select '[801, 751]'
  union select '[578, 66, 15]'
) as jsons;

# gives: [801, 751, 603, 753, 803, 801, 751, 578, 66, 15]

Второ, използвайте json_table за да конвертирате масива в редове.

select val
from (
    select concat('[',
        replace(
            replace(
                group_concat(vals),
                ']', ''),
            '[', ''),
        ']') as json
    from (
      select '[801, 751, 603, 753, 803]' as vals
      union select '[801, 751]'
      union select '[578, 66, 15]'
    ) as jsons
) as merged
join json_table(
    merged.json,
    '$[*]' columns (val int path '$')
) as jt
group by val;

# gives...
801
751
603
753
803
578
66
15

Вижте https://dev. mysql.com/doc/refman/8.0/en/json-table-functions.html#function_json-table

Забележете group by val за получаване на различни стойности. Можете също да order тях и всичко...

Или можете да използвате group_concat(distinct val) без group by директива (!), за да получите резултат от един ред.

Или дори cast(concat('[', group_concat(distinct val), ']') as json) за да получите правилен json масив:[15, 66, 578, 603, 751, 753, 801, 803] .

Прочетете моите Най-добри практики за използване на MySQL като JSON хранилище :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите последния запис във всяка група в MySQL

  2. MySQL:Код на грешка:1242 Подзаявката връща повече от 1 ред

  3. Съхранение на календарни данни в MySQL

  4. Грешка при PHP връзката с базата данни

  5. вмъкнете данни в база данни с помощта на сървлет и jsp в eclipse