Philipp Hasenfratz: mysql befehl gesucht

Beitrag lesen

Halihallo makaio

ála "select * from tabelle where 'spalte_xy enthält 89'" lol

SELECT * FROM tabelle WHERE spalte_xy LIKE "%xxx%" müßte klappen. Dabei hättest du aber erstmal das Problem, daß wenn du z.B. nach 7 suchst auch Zeilen mit Zahlen wie 57 oder 273 ausgewählt würden. In einem nächsten Schritt könntest du natürlich noch das Trennzeichen mit einbeziehen ("... LIKE "%7,%"), aber das würde dann die letzte Zahl von der Suche ausschließen (wenn du nicht das Trennzeichen noch immer hinten anhängst).

Das funktioniert noch immer nicht zu 100%, z.B. würde bei
LIKE "%7,%" auch die 57 gefunden (die 273 jedoch nicht). Falls man
davon ausgeht, dass nur nummerische Werte in der Liste vorkommen,
ist der Delimiter ein bestimmtes nicht nummerisches Zeichen (z.B.
das Komma), welches jeweils vor _und_ nach dem nummerischen Eintrag
kommt:

Das Feld muss also alla ",xx,yy,zz," aufgebaut sein und die Abfrage
muss auf LIKE "%,xx,%" lauten. Nur so kann man gewährleisten, dass
auch wirklich der und nur der abgefragte Wert in der Liste steht.

Soweit zu den Möglichkeiten (die mir bekannt sind) es mit dem Stand der Dinge umzusetzen. Ansonsten hat Tobias aber recht, daß das DB-Design sich nicht allzu glücklich liest.

Da schliesse ich mich natürlich an. Obwohl es in einigen Fällen auch
wesentlich besser sein kann... Aber diese "einigen Fälle" sind
sicherlich nicht so zahlreich, wie der "avarage case".

Würdest du alle Werte als einzelne Datensätze speichern, könntest du über einen Index ggf. sogar die Dauer der Suchabfrage verringern.

Leider nein. Ein Index indiziert die Attributwerte vom Stringanfang
her, man hat keine Chance Abfragen mit LIKE "%x%" zu optimieren.

LIKE "x%"
kann über Index optimiert werden.

LIKE "%x"
kann _nicht_ optimiert werden.

LIKE "%x%"
kann auch nicht optimiert werden und ist deswegen schlicht böse[tm].

Indizies sind einfach nicht darauf ausgelegt (obwohl es theoretisch
Möglich wäre, aber praktisch fast nie umgesetzt ist) Teilbereiche
des Attributes "separat" zu indizieren.

Viele Grüsse

Philipp