Mysql JSON Select?
Hi Community,
ich versuche alles anzeigen zulassen was zbs tag2 enthält aus einem JSON Format welches sich in meiner MariaDB befindet siehe screen.
So ist mein query zum hinzufügen der values, dabei ist Owner varhcarm picture TEXT und tags JSON:
INSERT INTO json_pics(owner, picture, tags) VALUES ("test","test.png",'["tag3", "tag4"]');
Ich versuche wie oben schon genannt mit einem SELECT Statement alle Einträge anzeigen zulassen die in field tags z.B. "tag4" stehen haben. Also das ich nach einem von den sachen in den klammern Filtern kann. Das müsste doch mit JSON_CONTAINS oder soetwas funktionieren?
Bild aus der beispiel DB:
Da sollte jetzt sozusagen id 2 und 3 angezeigt werden weil die beide tag 4 besitzen :)
Danke im vorraus und viele Grüße,
Flo
1 Antwort
Die Art, wie du die Informationen in deiner Datenbank speicherst, ist nicht gut. Jede Spalte sollte nur einen eindeutigen Wert beinhalten, nicht mehrere. Dann würde auch die Suche leichter fallen.
Zunächst würde ich eine Tabelle tags mit einer Spalte name anlegen. In die trägst du deine Tags (als jeweils einzelne Datensätze) ein. Jeder Tagname existiert also nur einmal in der Datenbank.
Die Spalte tags aus deiner Tabelle json_pics sollte ein Fremdschlüssel werden, der auf die name-Spalte der tags-Tabelle referenziert. Den Spaltennamen würde ich zu tag umbenennen.
Wenn du nun einen Eintrag XY hast, dem zwei Tags A, B zugehörig sind, werden in der Datenbanktabelle zwei Datensätze angelegt. Einmal mit einer Referenz auf Tag A, einmal mit Tag B.
Der Suchquery:
SELECT json_pics.owner, json_pics.picture
FROM json_pics
INNER JOIN tags ON json_pics.tag = tags.name
WHERE tags.name = "tag4"