Durch Kommas getrennte Wörter in einer Mysql Spalte auswählen?

3 Antworten

Wie bereits geschrieben mit dem LIKE Operator, sprich die Bedingung wäre:

help LIKE '%Einkaufshilfe%'

Generell nutzt man sowas, vor allem am Anfang eher nicht, da dann die Datenbank Indizes nicht genutzt werden können.

Eine weitere Möglichkeit ist natürlich die Werte zu splitten mittels rekursiven Queries. Die mit Abstand beste Möglichkeit wäre aber ein vernünftiges konsistentes Datenbankmodel. In einzelne Zellen gehören nicht mehrere Werte, diese hier mittels Komma separierten Werte gehören in eigene Zeilen, sonst führt man den Sinn einer relationalen Datenbank ad absurdum.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012

Es gibt zwei Möglichkeiten:

Vorab: Deine Tabelle verstößt gegen die 1. Normalform, die lautet: "Jeder Spalteninhalt muss atomar vorliegen". Das heißt, dass keine Datensammlungen in einer Spalte stehen dürfen. Ich würde eine extra Tabelle anlegen, die du dann mit einem Fremdschlüssel verbindest. Beispiel:

Person(ID, Name... etc)
benoetigen(PersonenID, HilfsbezeichungsID) // Beides Femdschlüssel
Hilfen(ID, Bezeichnung)

Dann nurnoch mit einem JOIN alle Daten abfragen.
Das wär die beste Variante (meiner Meinung nach). Mehr zu der Normalform

Wenn du aber nichts mehr an deinem DB-Schema ändern willst gibt es noch eine andere (unschöne) Variante:

Der LIKE Operator:
Dann gibst du an: SELECT * FROM ... WHERE help LIKE '%Einkaufshilfe%'
Das Prozentzeichen signalisiert SQL, dass davor und danach noch weitere Buchstaben stehen können.
Es gibt auch noch andere sogenannte Escape Character, mehr dazu hier.

Woher ich das weiß:Berufserfahrung

https://www.mysqltutorial.org/mysql-like/

Und dann Wildcards benutzen, LIKE 'Einkaufshilfe%' oder so


Luiswagener 
Beitragsersteller
 10.04.2020, 12:57

Funktioniert es auch wenn es durch ein Komma getrennt ist?

0
RoyalBeef  10.04.2020, 12:59
@Luiswagener

Ja, % steht für 0, 1 oder mehrere beliebige Zeichen. Wenn Du also %Einkaufshilfe% reingibst sucht er im gesamten String nach Einkaufshilfe egal was davor und dahinter steht. Für genau solche Answendungsfälle ist die Funktion ja gedacht ^^

1
Luiswagener 
Beitragsersteller
 10.04.2020, 13:06
@RoyalBeef

Vielen Danke!

Könnte der Code dann so aussehen?

"SELECT * FROM hilfe WHERE help LIKE '".$help."' AND bezirk LIKE '".$bezirk."' ORDER BY RAND() LIMIT 1";
0
RoyalBeef  10.04.2020, 13:12
@Luiswagener

Logisch richtig, würde mich aber auch gleich mal mit PDO Statements befassen und keine unescapten Werte reingeben, vor allem nicht wenn es Usereingaben sind. Siehe SQL Injections.

1