Mysql
 sql >> Base de données >  >> RDS >> Mysql

Filtre MySQL JSON_CONTAINS Toute valeur du tableau

Sur MySQL 5.7.8+, vous pouvez effectuer un JSON_CONTAINS pour chaque valeur distincte :

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

Lorsque les valeurs à rechercher sont stockées dans une variable PHP -- comme dans votre question -- alors vous pouvez construire le SQL ci-dessus comme ceci :

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

Depuis MySQL 8, vous pouvez utiliser JSON_OVERLAPS :

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