2017-04-06 6 views
0

Ich habe ein JSON-Feld in einer MySQL-Datenbank, die Werte wie [1,3,4,7] enthält. Ich möchte in der Lage sein, einfach ein anderes Array von einer PHP-Variable zu liefern und festzustellen, ob es Überlappungen gibt. Ich weiß, dass dieses Beispiel nicht funktioniert, aber das ist, was ich zu tun versucht:MySQL-Filter JSON_CONTAINS Beliebiger Wert von Array

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

Wie kann ich diese Abfrage erhalten ein Ergebnis zurück, da es eine 1 in jedem Array ist?

+0

bitte teilen Sie die Tabelle Daten –

+0

Sie wollen also nur doppelte Werte im Ergebnis? oder wie viele Werte dupliziert werden? – Shaharyar

+0

In welcher Version von Mysql bist du? –

Antwort

2

Sie könnten einen JSON_CONTAINS für jeden einzelnen Wert durchführen:

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

Wenn die Werte für in einer PHP-Variablen gespeichert werden gesucht werden, dann könnte man die obige SQL wie folgt aufbauen:

$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

Dies hilft nicht, da die Werte dynamisch sind. –

+0

In Ihrer Frage sind sie statisch. Können Sie Ihre Frage neu formulieren, damit sie auch in Ihrer Frage dynamisch ist? – trincot

+0

Ich habe die Frage aktualisiert –

Verwandte Themen