2017-04-06 791 views
0

[1,3,4,7]과 같은 값이 들어있는 MySQL 데이터베이스에 JSON 필드가 있습니다. PHP 변수에서 다른 배열을 쉽게 제공하고 겹치는 부분이 있는지 확인할 수 있기를 바랍니다. 나는이 예제가 작동하지 않습니다 알고있다, 그러나 이것은 내가 뭘하려고 오전 있습니다 : 각 배열에 1을 있기 때문에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') 
"); 

는 어떻게 얻을 수있는이 쿼리를 결과를 반환?

+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') 
     ) 

값이 다음과 같이 위의 SQL 구축 할 수있는 PHP 변수에 저장되어 검색 할 수있는 :

$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

질문을 업데이트했습니다. –