Aranita: SELECT: Aus MySQL doppelte Einträge entfernen

Hallo,

ich habe eine Tabelle mit folgendem Aufbau:
Feld 1: userid
Feld 2: profilid
Feld 3: datum

Ich möchte nun anzeigen, welche Userid zum Beispiel den Eintrag profilid=7 hat. Das ist auch kein Problem. Allerdings wenn userid 1 am 1.11.2002 die Profilid=7 gesetzt hat und am 4.11.2002 ebenfalls, möchte ich nur den neuesten Eintrag anzeigen, nicht alle.

Falls ich mich unklar ausgedrückt habe, hier ein Beispiel:

Tabelleneinträge:
userid: 1
profilid: 7
datum: 2002-11-01

userid: 1
profilid: 7
datum: 2002-11-11

userid: 2
profileid: 7
datum 2002-11-12

Angezeigt werden soll:
User 1 zuletzt am 11.11.2002
User 2 zuletzt am 12.11.2002

Ich hab einiges rumprobiert, komme aber zu keinem Ergebnis. Hat irgendwer eine Idee, wie ich diesen Select-Befehl aufbauen muss, damit das klappt?

Vielen Dank im Voraus!

Liebe Grüße,

Aranita

  1. Servus

    Hallo,

    ich habe eine Tabelle mit folgendem Aufbau:
    Feld 1: userid
    Feld 2: profilid
    Feld 3: datum

    Ich möchte nun anzeigen, welche Userid zum Beispiel den Eintrag profilid=7 hat. Das ist auch kein Problem. Allerdings wenn userid 1 am 1.11.2002 die Profilid=7 gesetzt hat und am 4.11.2002 ebenfalls, möchte ich nur den neuesten Eintrag anzeigen, nicht alle.

    Falls ich mich unklar ausgedrückt habe, hier ein Beispiel:

    Tabelleneinträge:
    userid: 1
    profilid: 7
    datum: 2002-11-01

    userid: 1
    profilid: 7
    datum: 2002-11-11

    userid: 2
    profileid: 7
    datum 2002-11-12

    Angezeigt werden soll:
    User 1 zuletzt am 11.11.2002
    User 2 zuletzt am 12.11.2002

    Ich hab einiges rumprobiert, komme aber zu keinem Ergebnis. Hat irgendwer eine Idee, wie ich diesen Select-Befehl aufbauen muss, damit das klappt?

    ich denke so könnt es gehen:
    select distinct userid,* from tabelle where profileid = 7 odery by datum desc;
    oder auch asc, probier mal damit rum!
    bydey

  2. Hi,

    Ich möchte nun anzeigen, welche Userid zum Beispiel den Eintrag profilid=7 hat. Das ist auch kein Problem. Allerdings wenn userid 1 am 1.11.2002 die Profilid=7 gesetzt hat und am 4.11.2002 ebenfalls, möchte ich nur den neuesten Eintrag anzeigen, nicht alle.

    Tabelleneinträge:
    userid: 1
    profilid: 7
    datum: 2002-11-01

    userid: 1
    profilid: 7
    datum: 2002-11-11

    userid: 2
    profileid: 7
    datum 2002-11-12

    Angezeigt werden soll:
    User 1 zuletzt am 11.11.2002
    User 2 zuletzt am 12.11.2002

    vielleicht mit einem GROUP BY?

    SELECT userid, profilid, datum FROM tabelle GROUP BY userid ORDER BY datum

    Das sollte für jeden User nur einen Datensatz ausspucken.

    viele Grüße
    Achim Schrepfer

    PS: irgendwie mag mich das Forum nicht. Das Thema musste ich zwangsweise neu setzen...

    1. Servus Achim»»

      PS: irgendwie mag mich das Forum nicht. Das Thema musste ich zwangsweise neu setzen...

      Ich glaube das ist Tagesform. Ich hatte das vor ein paar Tgen schon mal und auch bei diesem thread!

      bydey

    2. Hi Achim

      SELECT userid, profilid, datum FROM tabelle GROUP BY userid ORDER BY datum

      Das sollte für jeden User nur einen Datensatz ausspucken.

      *schrei* Blos nicht, damit nutzt du nur einen Fehler (ja, imho ein Fehler)
      in MySQL aus. Zudem wirkt order erst viel später und zu dem Zeitpunkt hat
      er bereits zufällig! irgend ein Datum ausgesucht.

      Wenn du Group by verwendest, darfst du nur Felder anzeigen lassen die
      entweder im Group by enthalten sind, oder eine Aggregatefunktion
      benutzen. Sonst kann er nicht entscheiden welche der vielen Möglichkeiten
      er in das entsprechende Feld tun soll. Richtige Datenbanken hauen es
      dir sonst auch um die Ohren, afaik ist sogar MySQL die einzige Ausnahme
      die zu raten versucht.

      Gruss Daniela

  3. Hi Aranita

    Deine Freunde sind Group by und die Aggregatsfunktion max().

    Select userid, max(datum)
      from ...
      where profileid = x
      group by userid

    Natürlich deine Feldnamen und Werte einsetzen. Zu diesem Thema steht
    allerdings schon überreichlich im Archiv.

    Gruss Daniela