SELECT: Aus MySQL doppelte Einträge entfernen
Aranita
- datenbank
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
Servus
Hallo,
ich habe eine Tabelle mit folgendem Aufbau:
Feld 1: userid
Feld 2: profilid
Feld 3: datumIch 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-01userid: 1
profilid: 7
datum: 2002-11-11userid: 2
profileid: 7
datum 2002-11-12Angezeigt werden soll:
User 1 zuletzt am 11.11.2002
User 2 zuletzt am 12.11.2002Ich 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
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-01userid: 1
profilid: 7
datum: 2002-11-11userid: 2
profileid: 7
datum 2002-11-12Angezeigt 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...
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
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
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