Gesperrte Benutzer aus einem Gästebuch löschen

Klopfdreh

Mitglied
Hallo,

ich habe ein Gästebuchsystem, wo eine Tabelle für viele Gästebücher verwendet wird.
Die jedweils richtigen Einträge werden dann mit einem dementsprechenden Select
herausselektiert.

Jeder Eintrag der usergb-Tabelle sieht somit wiefolgt aus:

id , username , absname , beitrag , datum

id ist eine fortlaufende Nummer jedes Eintrages.
username ist derjenige bei dem der Eintrag getätigt wurde.
absname ist derjenige der den Eintrag verfasst hat. (bei username)
datum ist das entsprechende Datum des Eintrages.



Nun habe ich eine zweite Tabelle in der gesperrte Benutzer vermerkt sind.

Die zugriff_gesperrt-Tabelle sieht wiefolgt aus:
username , ip , provider, zeit, email, grund

username der Benutzer der gesperrt wurde.
ip/provider ist die ip/provider des Benutzers.
zeit ist die Zeit des Sperrens.
email ist die Email des Benutzers.
grund ist der Grund des Sperrens.


Was ich möchte ist, alle Einträge zu löschen, die von einem gesperrten Mitglied getätigt wurden und die bei dem gesperrten Mitglied getätigt wurden.

Mein Denkansatz sieht wiefolgt aus:
PHP:
CREATE TEMPORARY TABLE ugb_gesperrt
SELECT u.* FROM usergb u
LEFT JOIN zugriff_gesperrt z
ON (z.username = u.username or u.absname = z.username )
WHERE z.username IS NOT NULL;

DELETE FROM ugb_gesperrt;

commit work;

Da man bei Mysql 4.x noch keine Subselects verwenden kann habe ich es über diesen Verbund versucht, was jedoch zu einem Timeout führt.

Was ich zudem getestet habe ist, bei dem ON einen Teil weg zu lassen und somit kein OR zu verwenden.
Dies führte tatsächlich dazu, dass ich alle Einträge die ein gesperrten Mitglied getätigt hat selektieren konnte.
Anders konnte ich auch alle Einträge die bei einem gesperrten Mitglied getätigt wurden selektieren.

Nun frag ich mich warum ich hierbei kein OR verwenden darf und warum das Query sich dann aufhängt?!


Vielen Dank schonmal im Vorraus für die Antwort!

---- Nachtrag ----
Ich habe noch eine neue Überlegung angstellt die einfach beide Fälle zusammenschließt.
Der Lösungsansatz wäre dann dieser hier.:

PHP:
SELECT u.* FROM usergb u
LEFT JOIN zugriff_gesperrt z
ON z.username = u.username
WHERE z.username IS NOT NULL
UNION
SELECT u.* FROM usergb u
LEFT JOIN zugriff_gesperrt z
ON z.username = u.absname
WHERE z.username IS NOT NULL
 
Zuletzt bearbeitet:
Zurück