MySQL – Statement bei dem eine Bedingung immer True ist

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 ;).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.