MySQL 过滤器 JSON_CONTAINS 数组中的任何值

Mik*_*uca 9 php mysql arrays json

我在 MySQL 数据库中有一个 JSON 字段,其中包含[1,3,4,7]. 我希望能够轻松地从 PHP 变量提供另一个数组并确定是否有任何重叠。我知道这个例子不起作用,但这就是我想要做的:

$DaysVar = $_GET['Days']; --Example is [1,5,8]

$sql = mysqli_query($db, "
    SELECT ScheduleID, 
           Days --Example is [1,3,4,7]
    FROM Schedule
    WHERE JSON_CONTAINS(Days, '$DaysVar')
");
Run Code Online (Sandbox Code Playgroud)

由于每个数组中有一个 1,我怎样才能让这个查询返回结果?

tri*_*cot 13

您可以JSON_CONTAINS为每个单独的值执行一个:

SELECT * 
FROM   Schedule 
WHERE  (   JSON_CONTAINS(Days, '1')
        OR JSON_CONTAINS(Days, '2')
        OR JSON_CONTAINS(Days, '6')
       )
Run Code Online (Sandbox Code Playgroud)

当要搜索的值存储在 PHP 变量中时,您可以像这样构建上述 SQL:

$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)
");
Run Code Online (Sandbox Code Playgroud)