Hallo liebe SelfPHP-Gemeinde,
ich bin gerade dabei ein kleines Portal zu basteln, in dem sich User registrieren können. Nun möchte ich noch eine Suche hinzufügen. Eigentlich ja kein Problem, wenn ich nicht einige Suchkriterien durch Privatsphäreeinstellungen gesichert hätte.
Also zum allgemeinen Verständnis. Die User dürfen sich ein Profil anlegen. Bei jedem privaten Detail darf der User entscheiden, ob es nur von Ihm gesehen werden darf, von seinen Freunden oder von allen. Desweiteren kann der User auch angeben, ob er über die Suche gefunden werden möchte.
Die persönlichen Daten werden in der Tabelle
user gespeichert und die Privatsphäreeinstellungen (inkl. ob der User in der Suche gefunden werden möchte) in der Tabelle user_privacy.
Tabelle
user enthält eine ID und die einzelnen Daten. primary key ist natürlich die ID
Tabelle
user_pravacy ist der primary key zusammengesetzt aus der user_id und dem Namen, welches Element geschützt werden soll. 3. Spalte ist dann nur ein value (0 - nur ich, 1 - Freunde, 2 - alle) Sieht dann in etwa so aus
user_id | name | value
1 | geburtsdatum | 2
1 | Wohnort | 1
1 | suche | 2 (0 heißt, der User will nicht gefunden werden, 1 nur freunde dürfen ihn finden, 2 alle dürfen ihn finden)
So jetzt mal kurz zu meiner SQL Anfrage, wenn man noch Usern in einer bestimmten Stadt sucht
Code:
SELECT DISTINCT id
FROM users u
LEFT JOIN users_privacy p ON (u.id = p.user_id)
WHERE city LIKE '%münchen%'
Funktioniert ohne Probleme! Nun mal hinzufügen, dass der User noch gefunden werden möchte
Code:
AND (
(p.name='search' AND p.value='2')
OR
(u.id IN (SELECT contact_user_id
FROM users_contact
WHERE user_id='1122')
AND p.name='search' AND p.value='1')
)
Soweit funktioniert noch alles. Der erste Teil sagt ja nur, dass wenn meine Such-Privatsphäreeinstellung auf 2 steht, der User gefunden wird. Nach dem OR die SELECT-Anweise sucht alle Kontakte von dem User und funktioniert nur, wenn Sucher und Gefundener bereits befreundet sind.
So, jetzt möchte ich auch noch überprüfen, ob der Gefundene auch seine Privatsphäreeinstellung für den Wohnort frei gegeben hat
Code:
AND (
(p.name='city' AND p.value='2')
OR
(u.id IN (SELECT contact_user_id
FROM users_contact
WHERE user_id='1122')
AND p.name='city' AND p.value='1')
)
also wird das noch angehängt und schwups, die Anfrage funktioniert nicht mehr. (Bedingung ist aber richtig formuliert, ohne die 'search'-Bedingung funktionierts)
Meine Vermutung ist, dass man wahrscheinlich nicht nach mehreren Zeilen suchen kann.
Die einzige Idee, die ich jetzt noch habe, ist die Such-Einstellung über PHP vorzunehmen, aber eigentlich wollte ich alles über die SQL Abfrage machen.
Hat irgendwer eine Idee, wie man das noch umsetzen könnte?!?
Vielen Dank schonmal für eure Hilfe
LG, Steffi
Falls ich zu verwirrend geschrieben habe, bin ich auch gerne bereit einzelne Punkte noch mal zu erklären :)