sql >> Database >  >> RDS >> Mysql

MySQL-filter JSON_CONTAINS Elke waarde uit array

Op MySQL 5.7.8+ kun je een JSON_CONTAINS voor elke afzonderlijke waarde:

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

Wanneer de te zoeken waarden zijn opgeslagen in een PHP-variabele -- zoals in uw vraag -- dan zou u de bovenstaande SQL als volgt kunnen bouwen:

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

Sinds MySQL 8 kun je gebruiken code>JSON_OVERLAPS :

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


  1. MySQL wijzigt tabel en converteert gegevens van tekst naar datetime

  2. Mysql-optimalisatie voor REGEXP

  3. Haal de laatste datum uit gegroepeerde MySQL-gegevens

  4. Hoe om te leiden naar een andere pagina op gebruikerstype in php en mysql