Denkanstoß gesucht für DB Zugriff

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

  • Denkanstoß gesucht für DB Zugriff

    N'abend,

    ich habe folgende Problemstellung:
    User können bei mir Beiträge schreiben. Man hat die möglichkeit andere zu "beobachten" bzw. "abonnieren". Sprich man kann sich die BEiträge der beobachteten Person anzeigen lassen.

    Ganz grobe Datenbankstruktur:

    Entry Table:
    id author_id text creation_date

    Watch Table:
    id watch_id (den man beobachtet) eigene_id


    Ich möchte dem User nun ermöglichen die letzten Einträge seiner abonnierten Beiträge anzusehen und von jedem User den man beobachtet immer nur den aktuellsten Eintrag. Natürlich mit 1 Query. Sonst wärs ja einfach

    Klar fallen mir dafür lösungen ein, aber die sind nicht sehr elegant. Jemand nen Denkanstoß für mich?

    Gruß
    Noro
    Zuletzt geändert von norodon; 29.01.2009, 17:43.

  • #2
    Ja, JOIN ist dein Freund.

    Kommentar


    • #3
      Nein, glaube das alleine hilft da nicht.

      Ich beschreib es mal Detaiierter:


      User A hat folgende Einträge:

      Eintrag 1: Hallo
      Eintrag 2: Bin Zuhause (nach Eintrag 1 erstellt)


      User B hat folgende Einträge:

      Eintrag 1: Bin neu hier.



      Beide habe ich Abonniert und sehe nun auf meiner Home-Seite:

      User A: Bin Zuhause
      User B: Bin neu hier


      Wüsste nicht wie Join allein mir da hilft... bin aber auch nicht so wissend in Datenbanken.

      Kommentar


      • #4
        und wie hast du versucht, dass du zu dem Erkenntnis kommst?

        Kommentar


        • #5
          Die IDee die ich dazu hatte ist sehr umständlich. Einzelenes Auslesen von Datenbankeinträgen und danach zusammensetzen und ausgeben.

          Alleridngs will ich da kein "Konstrukt" haben, sondern was elegantes. Über joins fällt mir nur das Einlesen z.B. der Usernames ein, wenn ich die User_ID habe.

          Kommentar


          • #6
            Wenn du überhaupt keinen Versuch startet und zeigst, dass du Interesse daran hast, selbst was zu machen, kann/will keiner dir helfen.

            Kommentar


            • #7
              Lies doch einfach mal den sticky Thread zu Joins und arbeite das Beispiel durch...

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                Den kannte ich schon. Bis heute morgen habe ich jedoch einfach keinen Zusammenhang zwischen Join und meinem Problem gesehen.

                Meine Idee zur Zeit ist:

                SELECT comment.text, comment.user_id
                FROM comment
                JOIN abo ON comment.user_id = abo.abo_id
                WHERE abo.User_id = 5


                Soweit, sogut, alle User die ich aboniert habe werden auch ausgegeben. Die Frage wäre nun wie gebe ich die aktuellsten einträge eines Users aus?

                Würde ich den neusten Eintrag eines users haben wollen würde ich folgendes tun:

                SELECT *
                FROM comment
                ORDER BY creation_data DESC
                LIMIT 1

                Welche Möglichkeiten habe ich, dass mit der obigen Abfrage zu kombinieren?

                Kommentar


                • #9
                  Subselect
                  (nein besser geht es leider (noch) nicht)

                  Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                  bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                  Wie man Fragen richtig stellt

                  Kommentar


                  • #10
                    Ich glaub ich habs:


                    SELECT comment.text, comment.user_id,max(stamp)
                    FROM comment
                    JOIN abo ON comment.user_id = abo.abo_id
                    WHERE abo.User_id = 5
                    GROUP BY user_Id


                    Zumindest funktioniert es.... optimierungen? ^^ Bin bei Joins immer am überlegen welche die effizienteste methode ist.

                    Aber subselects sind natürlich auch ne möglichkeit...


                    EDIT: Arghs wohl zu früh gefreut... muss ich wohl doch die SUbselects nehmen
                    Zuletzt geändert von norodon; 30.01.2009, 14:37.

                    Kommentar


                    • #11
                      Also ich habe jetzt einige Zeit rummprobiert heute nacht.

                      Ich habe überlegt ich könnte das SubSelect als FROM argument übergeben. Und innerhalb des SubSelect mache ich einen JOIN um nur alle relevanten inhalte auszulesen.

                      Was mir jetzt aber noch fehlt ist, wie ich wirklich nur die letzten Einträge eines Users auslesen kann.

                      Jeden User innerhalb eines weiteren SubSelects einzeln auslesen? und nur die aktuellsten übergeben?

                      Kommentar


                      • #12
                        Re: Denkanstoß gesucht für DB Zugriff

                        SELECT * FROM entry WHERE author_id IN (SELECT MAX(watch.id) FROM watch INNER JOIN entry ON watch_id = author_id WHERE eigene_id = $id GROUP BY watch_id);

                        vielleicht ist auch ein

                        SELECT a.* FROM entry a INNER JOIN (SELECT MAX(watch.id) cnt FROM watch INNER JOIN entry ON watch_id = author_id WHERE eigene_id = $id GROUP BY watch_id) b ON a.id = b.cnt;

                        schneller (sofern das in der Form geht) ... das ist bei Subselects immer etwas mit Glück behaftet...

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar

                        Lädt...
                        X