sql >> Database teknologi >  >> RDS >> Mysql

MySQL-filter JSON_CONTAINS Enhver værdi fra Array

På MySQL 5.7.8+ kan du udføre en JSON_CONTAINS for hver separat værdi:

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

Når værdierne, der skal søges efter, er gemt i en PHP-variabel -- som i dit spørgsmål -- så kan du bygge ovenstående SQL sådan her:

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

Siden MySQL 8 kan du bruge >JSON_OVERLAPS :

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


  1. Hvordan kan jeg inkludere null-værdier i en MIN eller MAX?

  2. PostgreSQL svarende til MySQL hukommelsestabeller?

  3. PHP Object Property har parenteser i sig

  4. mysql orden og groupby