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:
{
"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:
SELECT *
FROM pengguna
WHERE JSON_EXTRACT(info, '$.peran') MEMBER OF ('admin', 'editor');
Penjelasan
JSON_EXTRACT(info, '$.peran')
mengekstrak arrayperan
dari kolominfo
dalam bentuk array JSON.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:
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
:
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 pencarianIN
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