Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Keine doppelten Einträge aus MySQL?

  1. #1
    Registrierter Benutzer
    Registriert seit
    09.12.2001
    Beiträge
    171

    Keine doppelten Einträge aus MySQL?

    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

  2. #2
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Nehmen wir mal an, die Tabelle heisst POSTINGS und das Feld mit dem Usern USERNAME, dann sieht das so aus:

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

    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    SELECT DISTINCT Username FROM Postings
    sollte auch funktionieren. Hier bekommst du allerdings nicht die Anzahl der Postings.

  4. #4
    Registrierter Benutzer
    Registriert seit
    09.12.2001
    Beiträge
    171
    Zitat Zitat von Hans-Georg Normann
    Nehmen wir mal an, die Tabelle heisst POSTINGS und das Feld mit dem Usern USERNAME, dann sieht das so aus:

    Code:
    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?

  5. #5
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Code:
    SELECT
       USERNAME,
       COUNT(*),
       MAXIMUM(DATUMSFELD)
    FROM POSTINGS
    GROUP BY USERNAME
    ORDER BY USERNAME
    Damit bekommst du das letzte Posting eines jeden Users angezeigt.

    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  6. #6
    Registrierter Benutzer
    Registriert seit
    09.12.2001
    Beiträge
    171
    Zitat Zitat von Hans-Georg Normann
    Code:
    SELECT
       USERNAME,
       COUNT(*),
       MAXIMUM(DATUMSFELD)
    FROM POSTINGS
    GROUP BY USERNAME
    ORDER BY USERNAME
    Damit bekommst du das letzte Posting eines jeden Users angezeigt.

    Hans
    hi,

    leider funktioniert den befehl MAXIMUM(DATUMSFELD) nicht, ich erhalte immer folgende fehlermeldung:
    Code:
    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

  7. #7
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Kannst du mal deine Abfrage posten? Was passiert bei MIN(DATUMSFELD)?

    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  8. #8
    Registrierter Benutzer
    Registriert seit
    09.12.2001
    Beiträge
    171
    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:
    Code:
    $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:
    Code:
    $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
    Geändert von Stormsam (08-01-2005 um 11:55 Uhr)

  9. #9
    Registrierter Benutzer
    Registriert seit
    26.12.2002
    Ort
    Matrix
    Beiträge
    194
    Zitat Zitat von Stormsam
    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

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •