2017-10-01 5 views
1

Ich habe eine ‚Jobs‘ Tabelle wie folgt aus:Überprüfen Sie, ob Spalte json String mit bestimmten Wert hat

---------------------------------------------- 
|job_id |name     |skills  | 
---------------------------------------------- 
|1  |Job 1     |[1]  | 
|2  |Job 2     |[2,3]  | 
|3  |Job 3     |[4,5,6] | 
---------------------------------------------- 

Die Spalte ‚Fertigkeiten‘ enthält ein JSON-Array.

Ich brauche Arbeitsplätze zu wählen, in dem eine oder mehrere Fähigkeiten erfüllt sind - so etwas wie diese (aber offensichtlich funktioniert nicht):

SELECT * FROM jobs WHERE skills IN (1,4) 

zurückkehren sollte:

---------------------------------------------- 
|job_id |name     |skills  | 
---------------------------------------------- 
|1  |Job 1     |[1]  | 
|3  |Job 3     |[4,5,6] | 
---------------------------------------------- 
+0

Was ist Ihr 'JSON DATA' Spaltentyp? – underscore

+0

es ist String-Typ –

+0

Sie, was ist Ihre DB? postgres oder mysql? – underscore

Antwort

1

Sie verwenden könnte REGEXP

select * from jobs where skills REGEXP '[[:<:]]1[[:>:]]|[[:<:]]4[[:>:]]' 

anhängen, [[:<:]] vorher und [[:>:]] nach, um den genauen Wert und | für mehrere Werte übereinstimmen.

>>>Demo<<<

+0

Muss ich \ b nicht benutzen - kann es aber nicht funktionieren: http://sqlfiddle.com/#!9/e62bd3/3 –

+0

@SimonLobo-Nr. Warum brauchst du das? – Ravi

+0

Sonst könnte es einen Rekord 42 bei der Suche nach nur 4 –

0

Jede dieser Anfragen wird Ihre erwartete Ausgabe zurück.

Option 1

Wenn skills ist eine Zeichenfolge (Varchar, Text) können Sie die LIKE String-Vergleichsfunktion nutzen könnten.

SELECT * FROM jobs WHERE skills LIKE "%1%" OR skills LIKE "%4%";

Option 2

Oder, wenn Sie reguläre Ausdrücke bevorzugen, könnten Sie die REGEXP-Funktion verwenden.

SELECT * FROM jobs WHERE skills REGEXP "1|4";

0

JSON Speicherung in der Datenbank ist für Fälle geeignet, wenn Sie benötigen, zu melden oder die Abfrage nicht auf Feldern sagte, da es weniger effizient ist, und nimmt nicht den vollen Nutzen aus Jahren der Abfrageleistung Optimierungen durch die Datenbankanbieter. Ich berate mit 2 Tabellen, eine für Jobs und eine andere für Fähigkeiten, und ein Feld namens job_id in der Fähigkeiten Tabelle, so können Sie einfach eine Abfrage, die wie folgt aussieht:

wählen Sie Jobs. * Von Jobs wo Job. ID in (wählt job_id in Fähigkeit, wo skill_id in (1,4))

die Tabelle skill später erweitert werden könnte mehr Felder haben oder vielleicht auf andere Fähigkeiten zu verbinden.

Hoffe, dass hilft!

Verwandte Themen