[SQL allgemein] Sortieren einer DB

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [SQL allgemein] Sortieren einer DB

    Hi,
    ich habe in einer DB (mailbox) viele Nachrichten abgespeichert.
    Das Prinzip will ich nun ändern.
    Und zwar wie ein Forum!

    Sprich:
    z.B. 10 Nachrichten von 3 versch. Personen.
    Nun sollen nicht mehr alle Messages untereinander angezeigt werden (Oben die neusten) sondern immer nur EINE Message pro User.
    Habe ich also von User1 z.B. 2 Mails bekommen, steht in meiner Mailbox aber nur 1mal der Name des Users und das eine Neue Nachricht angekommen ist, wenn ich diese öffne, kommen alle jemals mit diesem User geschriebenen Message zum vorschein, nach Datum sortiert.
    Also oben die Neusten.
    Im Prinzip wie ein Forum.

    Hat jemand einen guten Ansatz wie ich die Messages 2 mal seperat sortieren lasse, nach Namen und Datum und nur 1 message pro User?

  • #2
    hi,

    ORDER BY (Sortieren)
    SELECT DISTINCT (nur eine anzeigen)

    Kommentar


    • #3
      Du willst also nur eine Message angezeigt haben?

      Was spricht denn gegen ein:

      Code:
      SELECT message
      FROM messages
      ORDER BY datum DESC
      LIMIT 1,1
      ??


      EDIT:

      @Mercury Ein Distinct würde hier nicht weiterhelfen, da es ja unterschiedliche Messages sind..

      signed oder unsigned... das ist hier die Frage

      Kommentar


      • #4
        Original geschrieben von Mercury1987
        hi,

        ORDER BY (Sortieren)
        SELECT DISTINCT (nur eine anzeigen)
        Das habe ich gesucht. Danke

        Kommentar


        • #5
          .... nein hast du nicht!

          Das Distinct würde nur verhindern, dass die Gleiche Nachricht 2 mal selected wird.
          signed oder unsigned... das ist hier die Frage

          Kommentar


          • #6
            Original geschrieben von case
            .... nein hast du nicht!

            Das Distinct würde nur verhindern, dass die Gleiche Nachricht 2 mal selected wird.
            Richtig.
            Und daher werden aus Allen meinen Nachrichten alle selectiert, die mir von versch. Usern geschickt wurden und nur 1mal jeder User auftaucht.

            Kommentar


            • #7
              aber wenn ein user dir 2 verschiedene nachichten schickt, so würden sie beide auftauchen... du solltest ein GROUP BY user machen und dir da die neueste Nachricht von holen
              signed oder unsigned... das ist hier die Frage

              Kommentar


              • #8
                Original geschrieben von case
                aber wenn ein user dir 2 verschiedene nachichten schickt, so würden sie beide auftauchen... du solltest ein GROUP BY user machen und dir da die neueste Nachricht von holen
                Ich glaube wir reden aneinander vorbei!
                Es wird nur EINE EINZIGE Anzeige gemacht von Jedem User der mir jemals geschrieben hat. Egal ob Neue Nachricht oder Alte Nachricht.
                Gibt es eine Neue Nachricht von einem User, so steht hinter dem Usernamen in der "Mailbox" z.B. "1 Neue Nachricht"
                oder auch "5 Neue Nachrichten.
                Egal wieviele Nachrichten eines User, es wird nur EINMAL der Username angezeigt und dahinter die Anzahl der evtl. neuen Nachtrichten.

                Bei einer Neuen nachricht wird der User, der mir die Nachricht geschrieben hat nach ganz oben on top gesetzt.

                Erst wenn ich auf den usernamen klicke in der Mailbox werden alle Gespräche zwischen mir und ihm chronologisch aufgelistet.

                Kommentar


                • #9
                  Na toll.
                  Einzelne Anzeige ist ja nur z.B. so möglich:
                  PHP-Code:
                    $sql mysql_query('SELECT DISTINCT
                                        usermailbox.textread,
                                        FROM usermailbox
                                        INNER JOIN user 
                                        ON usermailbox.fromuserid = user.userid 
                                        WHERE usermailbox.touserid = '
                  .$_SESSION['session_id'].'
                                        ORDER BY usermailbox.usermailboxid DESC'
                  ); 
                  und nicht mit mehreren Select Abfragen wie ich habe:
                  PHP-Code:
                    $sql mysql_query('SELECT DISTINCT
                                        usermailbox.textread,
                                        usermailbox.fromuserid,
                                        usermailbox.usermailboxid,
                                        usermailbox.maildate,
                                        usermailbox.mailtext,
                                        usermailbox.mailsubject,
                                        user.username
                                        FROM usermailbox
                                        INNER JOIN user 
                                        ON usermailbox.fromuserid = user.userid 
                                        WHERE usermailbox.touserid = '
                  .$_SESSION['session_id'].'
                                        ORDER BY usermailbox.usermailboxid DESC'
                  ); 

                  Kommentar


                  • #10
                    hmmm ok...

                    wenn du die User mit der Anzahl der Neuen Nachrichten haben willst, sortiert nach dem User, der als letztes eine Nachricht geschrieben hat musst du soetwas machen:

                    Code:
                    SELECT COUNT(M.id), U.username
                    FROM usermailbox AS M
                    INNER JOIN user AS O ON M.fromuserid = U.userid
                    WHERE M.touserid = '.$_SESSION['session_id'].'
                       AND M.unread = 1
                    ORDER BY 
                    MAX(M.id) ASC
                    GROUP BY
                    M.fromuserid

                    habe ich es nun Richtig verstanden? (Dies ist der Username mit der Anzahl neuer Nachrichten, so sortiert, dass der User mit der neuesten Nachricht nach oben kommt)

                    M.unread habe ich mir mal ausgedacht und von M.id bin ich mal ausgegangen, dass die existiert....
                    signed oder unsigned... das ist hier die Frage

                    Kommentar

                    Lädt...
                    X