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 arrayperandari kolominfodalam 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 OFlebih efisien ketika bekerja dengan array JSON dan mencari apakah elemen ada di dalam daftar nilai.JSON_CONTAINSlebih fleksibel untuk memeriksa keberadaan nilai dalam array JSON, tetapi mungkin kurang efisien untuk pencarianINyang 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