Rabu, Maret 19, 2025

Cara penggunaan SELECT WHERE JSON_EXTRACT IN (values)

 Tentu, mari kita lihat contoh penggunaan SELECT WHERE JSON_EXTRACT IN (values).

Skenario

Misalkan kita memiliki tabel pengguna dengan kolom info yang menyimpan data JSON seperti ini:

JSON
{
  "id_pengguna": 123,
  "status": "aktif",
  "peran": ["admin", "editor"]
}

{
  "id_pengguna": 456,
  "status": "nonaktif",
  "peran": ["pengguna"]
}

{
  "id_pengguna": 789,
  "status": "aktif",
  "peran": ["admin", "penulis"]
}

Kita ingin mencari semua pengguna yang memiliki peran "admin" atau "editor".

Query MySQL

Berikut adalah query MySQL yang bisa Anda gunakan:

SQL
SELECT *
FROM pengguna
WHERE JSON_EXTRACT(info, '$.peran') MEMBER OF ('admin', 'editor');

Penjelasan

  1. JSON_EXTRACT(info, '$.peran') mengekstrak array peran dari kolom info dalam bentuk array JSON.
  2. MEMBER OF ('admin', 'editor') akan memeriksa apakah setiap elemen dalam array yang diekstrak ada di dalam daftar nilai yang diberikan ('admin', 'editor').

Contoh Lain (menggunakan JSON_CONTAINS)

Jika Anda ingin menggunakan JSON_CONTAINS dengan IN, Anda bisa melakukannya seperti ini:

SQL
SELECT *
FROM pengguna
WHERE JSON_CONTAINS(info, JSON_ARRAY('admin'), '$.peran')
   OR JSON_CONTAINS(info, JSON_ARRAY('editor'), '$.peran');

Atau, jika anda memiliki tabel yang berisi daftar peran yang ingin anda cari, anda dapat menggunakan JOIN:

SQL
CREATE TABLE roles (
    role_name VARCHAR(255)
);

INSERT INTO roles (role_name) VALUES ('admin'), ('editor');

SELECT p.*
FROM pengguna p
JOIN roles r ON JSON_CONTAINS(p.info, JSON_ARRAY(r.role_name), '$.peran');

Penting

  • MEMBER OF lebih efisien ketika bekerja dengan array JSON dan mencari apakah elemen ada di dalam daftar nilai.
  • JSON_CONTAINS lebih fleksibel untuk memeriksa keberadaan nilai dalam array JSON, tetapi mungkin kurang efisien untuk pencarian IN yang besar.
  • Pastikan versi MySQL Anda mendukung fungsi-fungsi JSON yang digunakan. MySQL 5.7 dan yang lebih baru mendukung fungsi-fungsi ini.

Semoga contoh-contoh ini membantu Anda dalam menggunakan SELECT WHERE JSON_EXTRACT IN (values) atau alternatifnya.

Tidak ada komentar:

Posting Komentar

PHP Google Drive

https://g.co/gemini/share/4ec33b801d4a   Tentu, saya akan membantu Anda membuat kode PHP menggunakan Composer untuk melakukan sinkronisasi (...