[MySQL] Select mit join und Datumsberechnung

anddie

Well-known member
ID: 171
L
3 Mai 2006
2.270
133
Hallo,

Ich habe folgendes Problem mit einer Datenbankabfrage (MySQL).
Derzeit verwende ich 2 Tabellen. Die user-Tabelle enthält alle Stammdaten zu den einzelnen Usern (id, username, email,…) Die Passworttabelle enthält eine id, user-id, das verschlüsselte passwort und das datum (timestamp).
Für jede Passwortänderung wird eine neue Zeile in die Passworttabelle eingetragen, da ich die alten Passwörter noch benötige.

Jetzt möchte ich alle User herausfinden, die ihr Passwort innerhalb der letzten 90 Tage nicht geändert haben.

Mit einem
SELECT username, DATEDIFF(NOW(), passwort.datum) AS `diff`
FROM users INNER JOIN passwort ON users.id = passwort.uid
WHERE DATEDIFF(NOW(), passwort.datum) < 90
Bekomme ich alle User raus, die ihr PW innerhalb von 90 Tagen geändert haben. Wenn ich jetzt >90 mache, krieg ich allerdings alle Änderungen heraus.
Wie kann ich jetzt also die User herausfinden, wo es kein <90 gibt?

anddie
 
Hab grad nicht die Zeit, das Query zusammenzubauen, aber versuch mal 'nen LEFT JOIN mit der Zeitangabe in der JOIN-Bedingung. Dann dürften eigentlich alle Einträge mit NULL-Werten in den Spalten der zweiten Tabelle die gesuchten User sein.

Ansonsten nimmst Du das Query was Du schon hast als Subselect mittels WHERE username NOT IN (<query von oben>).
 
PHP:
SELECT 
	username,
	DATEDIFF(NOW(), passwort.datum) AS `diff`
FROM
	users LEFT JOIN
	passwort ON (users.id = passwort.uid AND DATEDIFF(NOW(), passwort.datum) < 90)
WHERE
	passwort.uid IS NULL

versuchs mal so (ist das selbe wie tleilax meint)
 
Super, danke euch.
Hab nach der Beschreibung von tleilax ungefähr 50 Datensätze herausbekommen, obwohl ich von ca. 6 ausgegangen bin und war deswegen verwirrt. Blöderweise waren da ungefähr 43 Datensätze mit einem Wert in meiner Delete-Spalte drin und die musste ich dann noch rausfiltern.

Bin also glücklich und zufrieden.

anddie