[MySQL] genauen Wert aus kommasepariertem Feld

Homer Simpson

Mitglied
Hallo zusammen,

ich habe eine Spalte "Keywords", diese enthält. z.B.
"1" "Eisenbahn, elektrische Eisenbahn, Modellflugzeug"
"2" "Eisenbahn, Modellflugzeug"
"3" "elektrische Eisenbahn, Modellflugzeug"

Jetzt möchte ich eine Abfrage schreiben, die mir alle Datensätze liefert, bei denen das Keyword Eisenbahn abgefragt wird. Rauskommen sollen nur die Zeilen 1 und 2, weil elektrische Eisenbahn ausgegrenzt werden soll.

Wie könnte ich das also am besten lösen?

Gruß
Markus
 
Wenn die Werte wirklich immer in diesem Format in deiner Tabelle stehen könntest du mal folgende Abfrage probieren:

select * from tabelle t where t.keyword LIKE
'Eisenbahn,%' //Eisenbahn ist erstes keyword
OR t.keyword LIKE '%, Eisenbahn,%' //Eisenbahn steht mittendrin
OR t.keyword LIKE '%, Eisenbahn' //Eisenbahn steht als letztes

Ist die Komma- und die Leerzeichensetzung die Einträge gegeneinander abgrenzt nicht immer gleich, wird das aber nicht funktionieren.
 
Danke schonmal für die Ansätze, klar wäre es besser zu normalisieren, aber das Feld kann ein oder mehrere Stichwörter enthalten und die User geben im Backend nur die Produktnamen dort ein.

Sozusagen wird ein Produkt X gezeigt und durch ein Keyword gleichzeitig Produkt Y und Z angepriesen, welches zum Produkt X passt.

Ich hoffe es ist verständlich und es gibt eine Lösung, ich hätte gedacht das es da schon längst Beispiele zu im Internet gibt, aber bisher hab ich keins gefunden.
 
Eigentlich muss es vier Fälle geben, da der Wert auch allein stehen kann:
Code:
SELECT *
FROM tabelle t
WHERE t.keyword = 'Eisenbahn'
  OR  t.keyword LIKE 'Eisenbahn,%'
  OR  t.keyword LIKE '%, Eisenbahn,%'
  OR  t.keyword LIKE '%, Eisenbahn'
Aus diesem Grund wäre vielleicht eine Suche mit regulärem Ausdruck sinnvoll:
Code:
SELECT *
FROM tabelle t
WHERE t.keyword REGEXP '(^|, )Eisenbahn(, |$)'
 
Sehr gut Markus, ich danke Dir :)
Dein Beispiel funktioniert auf Anhieb, ich werde mich wohl mal ernsthaft mit regulären Ausdrücken beschäftigen müssen.

Gruß
Markus
 
Hi,

Danke schonmal für die Ansätze, klar wäre es besser zu normalisieren, aber das Feld kann ein oder mehrere Stichwörter enthalten und die User geben im Backend nur die Produktnamen dort ein.

Sozusagen wird ein Produkt X gezeigt und durch ein Keyword gleichzeitig Produkt Y und Z angepriesen, welches zum Produkt X passt.

hmm, das Argument gegen Normalisierung geht irgendwie immer noch an mir vorbei...
Mit regulären Ausdrücken geht das natürlich, aber Dir muss dabei bewusst sein, dass die auch bei Datenbanken nicht sehr performant sind.

LG
 
Zurück