Problematische Abfrage mit LIKE

Problematische Abfrage mit LIKE

am 19.09.2006 16:00:53 von dani.speh

Hallo habe ein Problem mit folgender Konstellation In Typo3 gibt es
eine Usertabelle. In dieser Tabelle gibt es ein Feld Gruppen. In
diesem Feld sind die ID's aber in einem Format wie ID1,ID2,ID3 und
nicht wie man meinen sollte in einer Zwischentabelle.Also bSp.Wert für
das Feld usergroup=3D"1,2,5,13"
Wie kann ich zu Bsp abfragen was für User in einer Gruppe sind.

Iczh habe es so probiert. Select * from user where usergroup like
'%2%'. Das klappt solange die Ziffern einstellig sind. Wenn ich aber
zb. eine 12 habe dann findet er mit dem Statement auch die User die in
der Gruppe 2 als auch die in der Gruppe 12 was ja Falsch ist. Wie
könnte man das lösen. Eventuell mit php. Aber welcher Lösungsweg?
=20
Danke
=20
Dani

Re: Problematische Abfrage mit LIKE

am 19.09.2006 16:20:43 von Thomas Rachel

dani.speh@inode.at wrote:

> Hallo habe ein Problem mit folgender Konstellation In Typo3 gibt es
> eine Usertabelle. In dieser Tabelle gibt es ein Feld Gruppen. In
> diesem Feld sind die ID's aber in einem Format wie ID1,ID2,ID3 und
> nicht wie man meinen sollte in einer Zwischentabelle.Also bSp.Wert für
> das Feld usergroup="1,2,5,13"

Igitt. Ich meine, sowas schonmal im Zusammenhang mit Typo3 gelesen zu haben.
Ist das dort normal?


> Wie kann ich zu Bsp abfragen was für User in einer Gruppe sind.

Das Handbuch hätte Dir z.B. die Funktion FIND_IN_SET verraten:

Select * from user where FIND_IN_SET(2,usergroup)


Aber auch Deine Version wäre möglich gewesen:

Select * from user where concat(',',usergroup,',') like '%,2,%'


Ändert aber alles nix daran, daß das Datenmodell extrem krank ist.


Thomas
--
Ich glaube an das Pferd. Das Auto halte ich für eine
vorübergehende Modeerscheinung. (Kaiser Wilhelm II)

Re: Problematische Abfrage mit LIKE

am 19.09.2006 16:33:38 von Kai Ruhnau

dani.speh@inode.at wrote:
^^^^^^^^^^^^^^^^^^
Hier gehört dein Realname hin. Das erhöht die Zahl der Leute, die dir
helfen wollen.

> Hallo habe ein Problem mit folgender Konstellation In Typo3 gibt es
> eine Usertabelle. In dieser Tabelle gibt es ein Feld Gruppen. In
> diesem Feld sind die ID's aber in einem Format wie ID1,ID2,ID3 und
> nicht wie man meinen sollte in einer Zwischentabelle.Also bSp.Wert für
> das Feld usergroup="1,2,5,13"
> Wie kann ich zu Bsp abfragen was für User in einer Gruppe sind.

Dass Typo3 an dieser Stelle kaputt ist und unnormalisiert arbeitet,
haben wir zuletzt schon schmerzhaft feststellen müssen. Eine einfache
n:m-Beziehung mit entsprechendem JOIN und WHERE-Teil war den Entwicklern
zu kompliziert. Die "Früchte" dieser Schlamperei darfst du jetzt ernten.

> Iczh habe es so probiert. Select * from user where usergroup like
> '%2%'. Das klappt solange die Ziffern einstellig sind. Wenn ich aber
> zb. eine 12 habe dann findet er mit dem Statement auch die User die in
> der Gruppe 2 als auch die in der Gruppe 12 was ja Falsch ist. Wie
> könnte man das lösen. Eventuell mit php. Aber welcher Lösungsweg?

Du musst inklusive der Trenner abfragen. Das gestaltet sich allerdings
noch zusätzlich umständlich, da vorne und hinten kein Trenner
eingetragen ist:

WHERE
usergroup LIKE '2,%'
OR usergroup LIKE '%,2,%'
OR usergroup LIKE '%,2'

Allerdings wird so erfolgreich jegliche Indexbenutzung und Optimierung
abgeschaltet, aber was soll's, ist eh schon kaputt :-(

Grüße
Kai