• Hallo,

    ich weiß auch nicht, aber ich steh gerade völlig auf der Leitung.

    Ich will aus einer Datenbank mit "userid" und "time" Feldern alle userids abfragen, welche länger als eine bestimmte Zeit nicht mehr eingefügt wurden.
    Ähm, schwer zu verstehen, also die alle userids, wo der letzte "time" Einträg älter als eine bestimmte Zeit ist.

    Als Beispiel:

    SQL
    SELECT userid
    FROM test
    WHERE time "ist älter als" 1194982673
    GROUP BY userid

    Ich weiß, ich stell mich grad sau dumm an, wäre aber über Hilfe froh :wink:

    Danke schonmal im voraus!

  • Ja, ich arbeite mit Unix Timestamps.

    Dein Select wird mir jetzt alle userids zurückgeben, wo time älter als dieser timestamp ist. ABER ich möchte nur die userids, wo es gleichzeitig keine neueren gibt.

    Im Pseudocode ungefähr so:

    Code
    WHERE time < 1194982673 AND NOT time > 1194982673

    Ich weiß nicht ob das jetzt verständlicher rüber kam...

  • Ja, es gibt mehrere userids, es ist hier kein Primärschlüssel, sondern nur ein Index (und außerdem gibt es noch mehr Felder, sind hier aber unwichtig).

    d4f:
    Hm, das hab ich jetzt nicht so ganz verstanden.
    Nach 1) hab ich dann alle userids mit time älter als %Timestamp%.
    Und was soll ich unter 2) machen damit nur die übrig bleiben, die keine time neuer als %Timestamp% haben?

  • So, ich habe das Problem gelöst. Um nicht zu verwirren, hier nochmal die nötigen Infos:

    Tabelle "users" mit dem Feld "userid" und weiteren uninteressanten. "userid" ist hier Primärschlüssel.

    Tabelle "posts" mit dem Feld "userid", "posttime" und weiteren uninteressanten.
    "userid" ist hier ein Index auf die id in der oberen Tabelle und kommt daher mehrmals vor. "posttime" ist ein Unix Timestamp (= Sekunden seit 1.1.1970).

    Ich will folgendes:
    Alle "userid"s, welche (als Beispiel) die letzten 2 Wochen keinen post geschrieben haben. Soll heißen, dass in der Tabelle "posts" anhand ihrer "userid" seit 2 Wochen keinen neuen "posttime" mehr haben.

    Lösung:

    SQL
    SELECT userid
    FROM users
    WHERE userid NOT IN (
       SELECT userid
       FROM posts
       WHERE posttime > 1195125506
       GROUP BY userid
       )

    Der Timestamp 1195125506 ist hier einfach ein Beispiel, und passt auch nicht zu den 2 Wochen von oben.

    Getestet mit MySQL 4.1 und klappt wunderbar...