Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Bộ lọc MySQL JSON_CONTAINS Bất kỳ giá trị nào từ Mảng

Trên MySQL 5.7.8+, bạn có thể thực hiện JSON_CONTAINS cho mỗi giá trị riêng biệt:

SELECT * 
FROM   Schedule 
WHERE  (   JSON_CONTAINS(Days, '1')
        OR JSON_CONTAINS(Days, '2')
        OR JSON_CONTAINS(Days, '6')
       )

Khi các giá trị cần tìm được lưu trữ trong một biến PHP - như trong câu hỏi của bạn - thì bạn có thể xây dựng SQL ở trên như sau:

$DaysVar = $_GET['Days'];
$condition = implode(" OR ", array_map(function($day) {
    return "JSON_CONTAINS(Days, '$day')";
}, $DaysVar));
$sql = mysqli_query($db, "
    SELECT ScheduleID, 
           Days
    FROM   Schedule
    WHERE  ($condition)
");

MySQL 8. *

Kể từ MySQL 8, bạn có thể sử dụng JSON_OVERLAPS :

SELECT * 
FROM   Schedule
WHERE  JSON_OVERLAPS(Days, '$DaysVar')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiển thị giá trị cột đơn của truy vấn mysqli

  2. Cập nhật bảng MySQL với thứ hạng kỷ lục trong các nhóm

  3. MySQL cho phép sai các mục nhập trùng lặp khi một trong các trường liên quan là NULL

  4. Mã lỗi:1290. Máy chủ MySQL đang chạy với tùy chọn --secure-file-priv nên nó không thể thực thi câu lệnh này

  5. Cú pháp CHÈN SQL - Được DBMS liệt kê