MySQL: Abfrage über 4 Tabellen mit bestimmter Abhängigkeit

Gray

Erfahrenes Mitglied
So, jetzt wirds kompliziert.

Ich habe 3 Tabelen
Benutzer
Einstellungen
Verbindung

Es geht darum das man Leute in der Tabelle Benutzer suchen kann nach gewissen vorgaben, z.B. ob der gesuchte Racuher ist oder nicht
Diese Eigenschafften stehen in der Tabelle Einstellungen
Nun kommt noch hinzu das in der Tabelle Verbindung steht ob der Benutzer ein Freund ist oder geblockt wird.
Zusätzlich kann für die ganzen Werte unter Einstellungen gewählt werden ob es für alle, für Freunde oder niemanden sichtbar ist.

Die Abfrage soll jetzt wie folgt aussehen.

Ich frage alle Benutzer ab ohne nach einer bestimmten Einstellung (Raucher) zu suchen. Nun zeigt es mir alle Benutzer an.
Es sollen aber die Benutzer ausgeblendet werden von welchen ich geblockt werde.

Wenn ich nun zusätzlich noch nach einem Wert suche (Raucher) sollen nur die Ergebnisse auftauchen bei welchen angegeben ist das Raucher für alle sichtbar ist. Wenn eingestellt ist das Raucher nur für Freunde sichtbar ist dann soll das Ergebniss auch nur dann mit ausgegeben werden wenn ich als Freund unter Verbindung eingetragen bin.

Ich hoffe Ihr versteht was ich meine.

Die Datenbanken sehen wie folgt aus (vereinfacht):

Benutzer:
Code:
User_ID | Benutzername

Einstellungen:
Code:
ID | User_ID | Raucher | Sichtbar_fuer

Verbindung
Code:
ID | User_ID | User_ID_Meines_Gegenuebers | Freund_oder_Geblockt

Danke für eure Hilfe
 
Zeig mal deine SQL-Ansätze. Dann haben wir eine gute Grundlage.
Ich denke nicht dass die verscheidenen Auswertungen mit nur einem Query abgehandelt werden können.
Du kannst dein Query aber in PHP (ich denke mal du arbeitest mit PHP) zusammenbauen, je nachdem was für Auswahlen das betroffen sind.

Die erste Abfrage könnte etwa so aussehen
SQL:
SELECT
	b.user_id,
	b.benutzername
FROM
	benutzer b
WHERE
	b.user_id NOT IN (
						SELECT v.user_id 
						FROM verbindungen v
						WHERE 
							v.User_ID_Meines_Gegenuebers = meineId
							AND v.freund_oder_geblockt <> 'geblockt')
 
Zuletzt bearbeitet von einem Moderator:
Perfekt, das NOT IN wollte mir nicht einfallen, das war genau der Teil den ich rbauchte.

Vielen Dank
 
Zurück