Ankündigung

Einklappen
Keine Ankündigung bisher.

Gesprächsübersicht

Einklappen

Neue Werbung 2019

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

  • Gesprächsübersicht

    Hallo liebe/-r Leser/-in,
    ich möchte gerne eine Übersicht machen wo die Konversationen zwischen den Personen aufgelistet wird. In meiner Tabelle gibt es: ID, FUER, MESSAGE,DATE
    Nun möchte ich irgendwie das ausgeben: ,,Gespräch mit ID''. Natürlich muss ja auch FUER, falls man eine Nachricht erhält miteinkalkuliert wird. Das soll dann auch noch per Datum Sortiert werden. Mit der MySQL DISTINCT Funktion habe ich es leider nicht hinbekommen. Wisst ihr eine einfache Lösung? Ich freue mich über jede Antwort, die helfen könnte!

    Schöne Woche wünsche ich!

    Steven1997


  • #2
    Ahoi,

    also ich glaube ich hab nur die Hälfte verstanden ?
    Du willst also eine einfache SELECT-Anweisung an deine DB senden.
    Wofür DISTINCT ? Ergibt für mich keinen Sinn wenn das Ergebnis "Gespräch mit ID" sein soll.
    Zudem frage mich ich für was steht FUER ??
    ------
    Grüße Manü

    Kommentar


    • #3
      Dann zeig doch mal deinen Versuch/Ansatz, das ist bisher etwas viel "im Trüben fischen". Im Zweifelsfall funktioniert SELECT bei sowas ganz gut
      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        @Manu86

        Beispielsnachricht: von (ID)1 FUER(5) MESSAGE(Hi Wie gehts dir?) DATE(07.07.2014)

        Ich hatte Versucht:

        SELECT DISTINCT fuer FROM message


        Wenn ich es ohne DISTINCT mache, zeigt er ja mir sozusagen jedes Gespräch an. Also doppelt! Ich möchte es aber ja nur einmal stehen haben und dann sortiert nach Datum. Mit Distinct ist nach Datum sortieren komisch, bzw. funktioniert in diesem fall nicht richtig.

        Kommentar


        • #5
          zeigt er ja mir sozusagen jedes Gespräch an. Also doppelt
          Warum doppelt? Woher kommt der zweite Eintrag? Könnte ev. auf ein falsches DB-Design hinweisen.

          DATE(07.07.2014)
          By the way: Welchen Datentyp hat Date bei dir?
          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Zitat von hausl Beitrag anzeigen
            Warum doppelt? Woher kommt der zweite Eintrag? Könnte ev. auf ein falsches DB-Design hinweisen.

            Es gibt wie gesagt ID, FUER, MESSAGE, DATE

            Ich wüsste nicht, wie man es besser anstellen sollte.
            Warum doppelt? Wenn ich der Person z.B zwei Nachrichten schicke, gibt es ja zwei Einträge in der DB. Er soll mir aber nur den letzteren ausgeben.


            Mit dem Datum war das nur ein beispiel. Ich lasse es als TIMESTAMP eintragen. also 2014-07-06 00:00:00

            Kommentar


            • #7
              ich möchte gerne eine Übersicht machen wo die Konversationen zwischen den Personen aufgelistet wird.
              Er soll mir aber nur den letzteren ausgeben.
              Also von allen vorhandenen, verschiedensten Konversationen, die aktuellste jeweils von zwei Personen.

              Versuch mal GROUP BY() auf ID, FUER und mit MAX() auf Datum.

              ID ist der Absender der Nachricht?
              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Ja, ID ist der Absender der Nachricht. Ich werde es mal ausprobieren jetzt schnell!

                Kommentar


                • #9
                  @hausl

                  Irgendwie klappt das nicht so ganz. Um es nochmal besser zu erklären. Ich will alle Einträge wo meine ID(z.B 1) steht. Also bei ID und bei FUER. Und jede r wert soll halt nur einmal vorkommen und nach dem neusten Datum geordnet sein.

                  Kommentar


                  • #10
                    Zitat von Steven1997 Beitrag anzeigen
                    @hausl

                    Irgendwie klappt das nicht so ganz. Um es nochmal besser zu erklären. Ich will alle Einträge wo meine ID(z.B 1) steht. Also bei ID und bei FUER. Und jede r wert soll halt nur einmal vorkommen und nach dem neusten Datum geordnet sein.
                    Wir nehmen 2 kg Grundwissen und mischen das zusammen:

                    Code:
                    test=*# select * from steven1997;
                     id | von | an |   datum
                    ----+-----+----+------------
                      1 |   1 |  2 | 2014-07-08
                      2 |   1 |  3 | 2014-07-09
                      3 |   2 |  3 | 2014-07-10
                      4 |   2 |  1 | 2014-07-10
                      5 |   3 |  1 | 2014-07-10
                      6 |   1 |  3 | 2014-07-11
                    (6 rows)
                    
                    Time: 0,173 ms
                    test=*# select nutzer, max(datum) from (select von as nutzer, max(datum) as datum from steven1997 group by von union all select von as nutzer, max(datum) from steven1997 group by von)foo group by nutzer;
                     nutzer |    max
                    --------+------------
                          1 | 2014-07-11
                          3 | 2014-07-10
                          2 | 2014-07-10
                    (3 rows)
                    Das ganze noch mit passenden Indexen und Where-Bedingungen würzen und voila, fertsch.
                    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                    Kommentar


                    • #11
                      Zitat von akretschmer Beitrag anzeigen
                      Wir nehmen 2 kg Grundwissen und mischen das zusammen:

                      Code:
                      test=*# select * from steven1997;
                       id | von | an |   datum
                      ----+-----+----+------------
                        1 |   1 |  2 | 2014-07-08
                        2 |   1 |  3 | 2014-07-09
                        3 |   2 |  3 | 2014-07-10
                        4 |   2 |  1 | 2014-07-10
                        5 |   3 |  1 | 2014-07-10
                        6 |   1 |  3 | 2014-07-11
                      (6 rows)
                      
                      Time: 0,173 ms
                      test=*# select nutzer, max(datum) from (select von as nutzer, max(datum) as datum from steven1997 group by von union all select von as nutzer, max(datum) from steven1997 group by von)foo group by nutzer;
                       nutzer |    max
                      --------+------------
                            1 | 2014-07-11
                            3 | 2014-07-10
                            2 | 2014-07-10
                      (3 rows)
                      Das ganze noch mit passenden Indexen und Where-Bedingungen würzen und voila, fertsch.


                      Ich freue mich ja wirklich über deine Bemühungen, aber bei mir klappt damit gar nichts. Mit MySQL habe ich mich noch nicht sehr lange befasst. Ich werde mir wohl mal ein paar Videos angucken!

                      Kommentar


                      • #12
                        Zitat von Steven1997 Beitrag anzeigen
                        aber bei mir klappt damit gar nichts.
                        ich mag ja solche detaillierte Fehlerbeschreibungen...

                        Mit MySQL habe ich mich noch nicht sehr lange befasst.
                        Hast nix verpaßt.

                        Ich werde mir wohl mal ein paar Videos angucken!
                        https://www.youtube.com/watch?v=1PoFIohBSM4

                        Für den Anfang.
                        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                        Kommentar


                        • #13
                          Dein Humor mag ich @akretschmer
                          Ich habe mir gestern noch Material angeguckt, und habe sehr viele neue Funktionen gelernt, aber dennoch kriege ich es einfach nicht hin. Vielleicht kann schafft es jemand, wenn ich es nochmal detaillierter erkläre:

                          Also ich habe eine Tabelle mit dem Namen: Message. In dieser Tabelle gibt es folgende Spalten:
                          • ID(VON)
                          • FUER
                          • MESSAGE(Inhalt der Nachricht)
                          • DATE(TIMESTAMPT)



                          Nun benötige ich alle Einträge die eine ID(z.B 1) haben aus: ID, FUER, um sozusagen einen Posteineingang zu machen. Zwischen ID & FUER dürfen keine doppelten Einträge vorhanden sein, und dieses muss unter DATE DESC geordnet sein, damit der Posteingang immer aktuell ist.

                          @Akretschmer! Ich vertraue auf dich! Du hast glaube ich sehr viel Ahnung bezüglich SQL!

                          Kommentar


                          • #14
                            Zitat von Steven1997 Beitrag anzeigen
                            @Akretschmer! Ich vertraue auf dich! Du hast glaube ich sehr viel Ahnung bezüglich SQL!
                            Was genau hast Du nicht verstanden?
                            • du fragst die 2 Spalten separat nach der id und dem jüngsten Timestamp ab, in je einer Abfrage
                            • diese Resultate verknotest mit UNION zu einem
                            • in diesem suchst dann noch einmal nach dem jüngsten Timestamp


                            Willst das nur für eine bestimmte ID baust die am besten in die 2 ersten Selects mit ein.
                            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                            Kommentar

                            Lädt...
                            X