Array vergleichen in mysql
droom
- datenbank
Hallo folks,
habe folgenden String $my_groups = '5,34,56'; wo die IDs meiner Gruppen gespeichert sind.
In der Datenbank, habe ich folgende Struktur für eine Seite
seitenid|seitentitel|usergroup|
12 | faq | 34 |
13 | contact | 34,56 |
14 | Home | 32 |
ich möchte nun in einem sql statement die Seiten finden, die ich sehen darf. In unserem Fall 12 und 13.
Ich dachte an etwas in der Art:
select seitenid from pages where usergroup in (5,34,56) order by seitenid
Hi!
habe folgenden String $my_groups = '5,34,56'; wo die IDs meiner Gruppen gespeichert sind.
seitenid|seitentitel|usergroup|
12 | faq | 34 |
13 | contact | 34,56 |
14 | Home | 32 |
ich möchte nun in einem sql statement die Seiten finden, die ich sehen darf. In unserem Fall 12 und 13.
select seitenid from pages where usergroup in (5,34,56) order by seitenid
Du hast im Datensatz seitenid=13 im Feld usergroup nicht die IDs 34 und 56 stehen sondern den String "34,56". Weder ist 34 gleich "34,56" noch trifft das auf 56 zu. Diese beiden Zahlen kannst du darin nur finden, wenn du Stringoperationen anwendest oder die Funktion FIND_IN_SET(). Allerdings kannst du dabei immer nur einen Wert finden und nicht wie bei IN() einen aus mehreren.
Das ist eines der unschön zu lösenden Folgeprobleme, wenn du in einem solchen Fall wie deinem Daten nicht normalisiert speicherst sondern als großen Haufen in einem Feld ablegst.
Lo!
hi,
In der Datenbank, habe ich folgende Struktur für eine Seite
seitenid|seitentitel|usergroup|
12 | faq | 34 |
13 | contact | 34,56 |
14 | Home | 32 |
Das ist nicht genügend normalisiert.
ich möchte nun in einem sql statement die Seiten finden, die ich sehen darf. In unserem Fall 12 und 13.
Normalisiere dahingehend, dass über den key 'seitenid' eine Detailtabelle 'usergroups' referenziert wird. Dann wird die Abfage einfacher.
Hotti
Na ja ich kann ja nichts für. Die Struktur ist die von Typo3 und die kann ich nicht ändern. Ich habe aber eine Lösung gefunden:
select seitenid from pages where usergroup like '5,%' or usergroup like '%,5' or usergroup like '%,5,%' or usergroup = '5' or usergroup like '34,%' or usergroup like '%,34' or usergroup like '%,34,%' or usergroup = '34' or usergroup like '56,%' or usergroup like '%,56' or usergroup like '%,56,%' or usergroup = '56';
Hi!
select seitenid from pages where usergroup like '5,%' or usergroup like '%,5' or usergroup like '%,5,%' or usergroup = '5' or usergroup like '34,%' or usergroup like '%,34' or usergroup like '%,34,%' or usergroup = '34' or usergroup like '56,%' or usergroup like '%,56' or usergroup like '%,56,%' or usergroup = '56';
Das kannst du mit FIELD_IN_SET() billiger haben. Statt für jede Gruppe 4 Vergleiche zu machen, kommst du damit auf je einen.
Lo!
Hi,
Na ja ich kann ja nichts für.
es geht nicht darum, ob Du etwas _für_ die Fehler kannst. Es geht darum, ob Du etwas _dagegen_ kannst.
Cheatah