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 ;).
Interessiert in verschiedenste IT Themen, schreibe ich in diesem Blog über Software, Hardware, Smart Home, Games und vieles mehr. Ich berichte z.B. über die Installation und Konfiguration von Software als auch von Problemen mit dieser. News sind ebenso spannend, sodass ich auch über Updates, Releases und Neuigkeiten aus der IT berichte. Letztendlich nutze ich Taste-of-IT als eigene Dokumentation und Anlaufstelle bei wiederkehrenden Themen. Ich hoffe ich kann dich ebenso informieren und bei Problemen eine schnelle Lösung anbieten. Wer meinen Aufwand unterstützen möchte, kann gerne eine Tasse oder Pod Kaffe per PayPal spenden – vielen Dank.