Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL филтър JSON_CONTAINS Всяка стойност от масив

На MySQL 5.7.8+ можете да извършите JSON_CONTAINS за всяка отделна стойност:

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

Когато стойностите, които трябва да се търсят, се съхраняват в PHP променлива - както във вашия въпрос - тогава можете да изградите горния SQL по следния начин:

$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.*

От MySQL 8 можете да използвате 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. SQL заявка, която връща таблица, където всеки ред представлява дата в даден диапазон

  2. Как да свържа една таблица с много различни таблици?

  3. MySQL - Външен ключ при изтриване задайте null в полето non null

  4. gitlab runner:mysqld:Не мога да прочета директорията на '/etc/mysql/conf.d/'

  5. Как да се свържа с MySQL сървър на друг хост?