Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Filtro MySQL JSON_CONTAINS Qualquer valor do Array


No MySQL 5.7.8+, você pode executar um JSON_CONTAINS para cada valor separado:
SELECT * 
FROM   Schedule 
WHERE  (   JSON_CONTAINS(Days, '1')
        OR JSON_CONTAINS(Days, '2')
        OR JSON_CONTAINS(Days, '6')
       )

Quando os valores a serem pesquisados ​​são armazenados em uma variável PHP - como na sua pergunta -, você pode construir o SQL acima assim:
$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.*


Desde o MySQL 8 você pode usar JSON_OVERLAPS :
SELECT * 
FROM   Schedule
WHERE  JSON_OVERLAPS(Days, '$DaysVar')