sql >> Databáze >  >> RDS >> Mysql

Filtr MySQL JSON_CONTAINS Jakákoli hodnota z pole

Na MySQL 5.7.8+ můžete provést JSON_CONTAINS pro každou samostatnou hodnotu:

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

Když jsou hodnoty, které se mají hledat, uloženy v proměnné PHP – jako ve vaší otázce – můžete výše uvedené SQL sestavit takto:

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

Od MySQL 8 můžete používat JSON_OVERLAPS :

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


  1. MySQL group_concat s výběrem uvnitř select

  2. Převeďte pole PostgreSQL na pole PHP

  3. Mysql_real_escape_string() Varování Zmatek

  4. Problémy s kontrolou, zda tabulka v db existuje nebo ne