2017-04-06 83 views
0

我在包含像[1,3,4,7]這樣的值的MySQL數據庫中有一個JSON字段。我希望能夠輕鬆地從PHP變量提供另一個數組,並確定是否有任何重疊。我知道這個例子是不行的,但是這是我想做的事:MySQL過濾器JSON_CONTAINS來自陣列的任何值

$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') 
"); 

我怎樣才能得到這個查詢返回的結果,因爲有每一個組中1?

+0

請分享表格數據 –

+0

所以你只需要重複值的結果?或計數多少個值重複? – Shaharyar

+0

你在什麼版本的Mysql? –

回答

2

你可以爲每個單獨的值進行JSON_CONTAINS

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

如果要搜索存儲在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) 
"); 
+0

這將無濟於事,因爲這些值將是動態的。 –

+0

在你的問題,他們是靜態的。你能否重新表達你的問題,以便在你的問題中他們是動態的? – trincot

+0

我已更新問題 –