
MySQL Community Version 5.5.32
Ziel soll es sein eine Selec Abfrage / Statement durchzuführen bei dem die User-ID immer vorhanden und gleich der anfragenden ist. Zusätzlich gibt es in dieser Tabelle mehrere Verknüpfungen zu dieser User-ID, die jedoch nur unter bestimmten Umständen 1, 2, oder 3 z.B. selektiert werden dürfen.
Beispiel
Wenn die User-ID = 6 ist, dann sollen alle Felder mit der Feld-ID 3 und 4 abgefragt werden, aber nicht die von Feld 1 oder 2 und schon gar nicht die der User-ID 7. <- als Beispiel.
Beispiel Tabell
int | user-id | feld-id | name |
1 | 6 | 1 | Bob |
2 | 6 | 2 | Boby |
3 | 6 | 4 | Bobster |
4 | 7 | 3 | Mary |
zu erwartendes Ergebnis
int | user-id | feld-id | name |
1 | 6 | 1 | Bob |
2 | 6 | 2 | Boby |
3 | 6 | 4 | Bobster |
4 | 7 | 3 | Mary |
Was nicht funktioniert:
Es werden keine selektiert weil keine Bedingung wahr ist: USER-ID= 6 UND FELD-ID=3 UND FELD-ID=4
$query = SELECT * FROM TABLE WHERE user-id = ‘6’ AND feld-id=’3′ AND feld-id=’4′
int | user-id | feld-id | name |
1 | 6 | 1 | Bob |
2 | 6 | 2 | Boby |
3 | 6 | 4 | Bobster |
4 | 7 | 3 | Mary |
Es werden alle Felder selektiert die entweder USER-ID 6, oder Feld-ID 1 oder oder haben.
$query = SELECT * FROM TABLE WHERE user-id = ‘6’ OR feld-id=’3′ OR feld-id=’4′
int | user-id | feld-id | name |
1 | 6 | 1 | Bob |
2 | 6 | 2 | Boby |
3 | 6 | 4 | Bobster |
4 | 7 | 3 | Mary |
Es werden alle Felder selektiert die von User-ID 6 sind und 1,2 und 4 als Feld-ID besitzen. Feld-ID 3 gib es ja eh nicht.
$query = SELECT * FROM TABLE WHERE user-id = ‘6’ OR feld-id=’3′ AND feld-id=’4′
int | user-id | feld-id | name |
1 | 6 | 1 | Bob |
2 | 6 | 2 | Boby |
3 | 6 | 4 | Bobster |
4 | 7 | 3 | Mary |
Es werden die Felder selektiert die User-ID 6 und Feld-ID 3 haben, also keine und alle andere die die Feld-ID 4 haben.
$query = SELECT * FROM TABLE WHERE user-id = ‘6’ AND feld-id=’3′ OR feld-id=’4′
int | user-id | feld-id | name |
1 | 6 | 1 | Bob |
2 | 6 | 2 | Boby |
3 | 6 | 4 | Bobster |
4 | 7 | 3 | Mary |
Lösung 1
Damit nun nur die Feld-ID’s von User-ID 6 gewählt werden kann man folgendes machen:
$query = SELECT * FROM TABLE WHERE user-id=’6′ AND feld-id=’3′ OR user-id=’6′ AND feld-id=’4′
Lösung 2
Oder aber man verkürzt dies und nutzt das MySQL Statement ‘IN’:
$query = SELECT * FROM TABLE WHERE user-id=’6′ AND feld-id IN (‘3’, ‘4’)
Die obige MySQL Lösung 2 finde ich am besten. Sie ist übersichtlicher auch dann wenn die Statements größer werden. Sollte es noch weitere Lösungsmöglichkeiten geben, immer her damit, auch grade wenn es um Performance geht ;).
Antworten