Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Dapatkan nilai berbeda dari array MySQL JSON

Maaf untuk necromancing, tetapi saya mengalami masalah serupa. Solusinya adalah:JSON_TABLE() tersedia sejak MySQL 8.0.

Pertama, gabungkan larik dalam baris menjadi larik tunggal satu baris.

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]

Kedua, gunakan json_table untuk mengubah larik menjadi baris.

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

Lihat https://dev. mysql.com/doc/refman/8.0/en/json-table-functions.html#function_json-table

Perhatikan group by val untuk mendapatkan nilai yang berbeda. Anda juga dapat order mereka dan segalanya...

Atau Anda dapat menggunakan group_concat(distinct val) tanpa group by direktif (!) untuk mendapatkan hasil satu baris.

Atau bahkan cast(concat('[', group_concat(distinct val), ']') as json) untuk mendapatkan larik json yang tepat:[15, 66, 578, 603, 751, 753, 801, 803] .

Baca Praktik Terbaik untuk menggunakan MySQL sebagai penyimpanan 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. Bisakah Anda bergabung dalam subquery dengan Doctrine 2 DQL?

  2. Panduan untuk memahami pola penskalaan basis data

  3. kesalahan 1265. Data terpotong untuk kolom saat mencoba memuat data dari file txt

  4. PILIH nilai min dan maks dari bagian tabel di MySQL

  5. Codeigniter - Model Akses Dan Basis Data pada Perutean