PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Keine doppelten Einträge aus MySQL?



Stormsam
23-12-2004, 15:59
Hi@all,

möchte aus meiner Datenbank alle User herauslesen, ohne das er mir einen doppelt auflistet.

Anwendungbeispiel:

Es haben mehrere User in ein Forum geschrieben, jetzt möchte ich eine Liste erstellen, wer alles in dieses Forum geschrieben hat.
In der Datenbank steht jetzt:
user1 : blabla
user2 : blabla
user2 : blabla
user3 : blabla
user1 : blabla

etc...
Jetzt soll mir MySQL ausgeben:
es hat geschrieben:
user1 (mit 2 Beiträgen)
user2 (mit 2 Beiträgen)
user3 (mit 1 Beitrag)

Bekomme das irgendwie nicht hin - mir fehlt die Idee oder der Befehl !

hoffe ihr könnt mir weiterhelfen :)

stormsam

Hans-Georg Normann
23-12-2004, 20:21
Nehmen wir mal an, die Tabelle heisst POSTINGS und das Feld mit dem Usern USERNAME, dann sieht das so aus:


SELECT
USERNAME,
COUNT(*)
FROM POSTINGS
GROUP BY USERNAME
ORDER BY USERNAME Das war's.

Hans

Joghurt
24-12-2004, 13:04
SELECT DISTINCT Username FROM Postings
sollte auch funktionieren. Hier bekommst du allerdings nicht die Anzahl der Postings.

Stormsam
26-12-2004, 11:43
Nehmen wir mal an, die Tabelle heisst POSTINGS und das Feld mit dem Usern USERNAME, dann sieht das so aus:


SELECT
USERNAME,
COUNT(*)
FROM POSTINGS
GROUP BY USERNAME
ORDER BY USERNAME Das war's.

Hans

Danke das funktioniert schon mal sehr gut!
Habe nur noch ein Problem, wollte das ganze order by datum machen.
Im Grunde funktioniert es auch, nur sucht er sich nicht vom jedem user den neusten Beitrag.
Er sucht sich immer irgendeinen Beitrag von jedem User raus und sortiert dann noch datum, ich wollt aber das er von jedem user den neusten Beitrag raussucht und erst dann anfängt zu sortieren.
weiß jemand wie ich das machen kann?

Hans-Georg Normann
26-12-2004, 16:49
SELECT
USERNAME,
COUNT(*),
MAXIMUM(DATUMSFELD)
FROM POSTINGS
GROUP BY USERNAME
ORDER BY USERNAMEDamit bekommst du das letzte Posting eines jeden Users angezeigt.

Hans

Stormsam
26-12-2004, 18:16
SELECT
USERNAME,
COUNT(*),
MAXIMUM(DATUMSFELD)
FROM POSTINGS
GROUP BY USERNAME
ORDER BY USERNAMEDamit bekommst du das letzte Posting eines jeden Users angezeigt.

Hans

hi,

leider funktioniert den befehl MAXIMUM(DATUMSFELD) nicht, ich erhalte immer folgende fehlermeldung:

Warning: mysql_result(): supplied argument is not a valid MySQL result resource

hab dann auf mysql.com geschaut, dort benutzen die den befehl MAX, wenn ich diesen nutze, kommt zwar keine fehlermeldung, aber er nimmt immer noch nicht den neusten beitrag, sondert es bleibt beim alten :(

mfg
stormsam

Hans-Georg Normann
28-12-2004, 17:07
Kannst du mal deine Abfrage posten? Was passiert bei MIN(DATUMSFELD)?

Hans

Stormsam
08-01-2005, 11:51
sry für die verspätete antwort, weiter gehts:

habe mal min(datum) ausprobiert - hat nichts geändert. Dabei ist mir aber aufgefallen das er bei MAX und bei MIN immer nur die ersten beitrgäe rausnimmt (also die ganz alten) - ich wollt aber das er nur die neusten rausnimmt.
Wieso macht er bei MAX und MIN das gleiche?

Hier mal meine genaue abfrage:

$query2="SELECT id, uber, text, vonuser, anuserid, datum, gelesen, mitname, COUNT(*), MAX(datum) FROM $sqltable_msg WHERE anuserid='$id_id' GROUP BY vonuser ORDER BY datum DESC";

$result2=mysql_query($query2) or die(mysql_error());


while($daten=mysql_fetch_row($result2))
[...]

das zeigt immer nur die ältesten beitrage, genau wie folgendes:

$query2="SELECT id, uber, text, vonuser, anuserid, datum, gelesen, mitname, COUNT(*), MIN(datum) FROM $sqltable_msg WHERE anuserid='$id_id' GROUP BY vonuser ORDER BY datum DESC";

$result2=mysql_query($query2) or die(mysql_error());


while($daten=mysql_fetch_row($result2))
[...]
Wie krieg ich nun nur die neusten beiträge raus?
Vielleicht auch mal die MySQL Einstellungen: datum - int(255) Beispiel:1105131076

mfg
stormsam

Jasper
08-01-2005, 13:26
Wie krieg ich nun nur die neusten beiträge raus?


es macht keinen sinn, bei GROUP BY felder zu selektieren, nach denen NICHT gruppiert wird. lt. ANSI ist das nicht korrekt weil die ergebnisse nicht eindeutig definiert sind (innerhalb der gruppen müssten alle werte gleich sein). naja, ist halt mysql (ich würde mysql im ansi-modus fahren um diese "features" abzuschalten). zu deiner frage: hans-georg normann hat sie dir korrekt beantwortet:

SELECT vonuser, MAX(datum) from $sqltable_msg WHERE anuserid='$id_id' GROUP BY vonuser ORDER BY datum DESC;


-j