Announcement

Collapse
No announcement yet.

Tabellen verknüpfen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tabellen verknüpfen

    Hallo,
    ich habe folgende Tabellen:

    Code:
    CREATE TABLE user (
     user_id INT(255) NOT NULL AUTO_INCREMENT,
     email VARCHAR(100) NOT NULL,
     password VARCHAR(255) NOT NULL,
     username VARCHAR(100),
     PRIMARY KEY(user_id),
    ) ENGINE = INNODB
    Code:
    CREATE TABLE beschreibung (
        beschreibung_id INT NOT NULL AUTO_INCREMENT,
        user_id INT NOT NULL,
        name varchar(100),
        vorname varchar(100),
        geschlecht varchar(100),
        user_alter int(3),
        geburtsdatum date,
        lieblingsziel varchar(100),
        beschreibung text,
        profilbild varchar(100) DEFAULT „img/Bild_platzhalter.png“,
        PRIMARY KEY (beschreibung_id),
        FOREIGN KEY (user_id) REFERENCES user ( user_id )
    ) ENGINE = INNODB
    Code:
    CREATE TABLE abonniert(
     user_id INT(255) NOT NULL AUTO_INCREMENT,
     abonniert_id INT(255) NOT NULL,
     datum DATETIME DEFAULT CURRENT_TIMESTAMP,
     PRIMARY KEY(user_id, abonniert_id),
     FOREIGN KEY(user_id) REFERENCES user(user_id),
     FOREIGN KEY(abonniert_id) REFERENCES user(user_id)
    ) ENGINE = INNODB
    Beispiel für abonniert (nur die ids damit es einfacher ist)
    user_id abonniert_id
    1 4
    2 12
    2 4
    1 6
    1 46
    1 9
    3 8
    Ich möchte jetzt folgende Abfrage haben:
    ich brauche für alle abonniert.abonniert_id die mit user:_id = (z.B.) 1 in einer Zeile stehen jeweils user.username, user.user_id, beschreibung.url

    und habe leider keine Idee, wie ich das machen soll und würde mich daher sehr über Hilfe freuen.
    Vielen Dank!
    Zuletzt editiert von UnknownInncoent; 14.05.2019, 21:28. Reason: sql

  • #2

    SELECT
    user.username, user.user_id, beschreibung.url,abonniert.abonniert_id FROM user
    LEFT JOIN beschreibung ON user.user_id=beschreibung.user_id
    LEFT JOIN abonniert ON user.user_id=abonniert.user_id


    Dein Beispiel verstehe ich nicht
    Christian

    Comment


    • #3
      Im Prinzip möchte ich einfach alle Leute die ich abonniert habe (also wenn ich user_id 1 bin habe ich abonniert_id 4, 6, 46, 9 abonniert) mit ihrer user.user_id, user.username und beschreibung.url auflisten.

      Comment


      • #4
        s.o. das Statement
        Christian

        Comment


        • #5
          Das funktioniert leider nicht so wie ich mir das vorstelle.
          Angenommen ich habe folgende Tabellen (gekürzt):

          user
          user_id username password registerdate email
          1 test faffafaf NULL NULL
          2 bernd adafafaf NULL NULL
          3 tom adfafafaf NULL NULL
          4 thomas sfbaufhaf NULL NULL
          bescrheibung
          beschreibung_id user_id name vorname url
          1 1 NULL NULL img/pic1
          2 2 NULL NULL img/pic2
          3 3 NULL NULL img/pic3
          4 4 NULL NULL img/pic4
          abonniert
          user_id abonniert_id
          1 2
          1 3
          1 4
          2 1
          2 3
          2 4
          3 1
          3 4
          4 2

          Jetzt möchte ich folgende Tabelle bekommen in denen die aufgelistet werden die von user_id 1 abonniert wurden:
          user_id username url
          2 bernd img/pic2
          3 tom img/pic3
          4 thomas img/pic4
          Mit welcher Abfrage mache ich aus den ersten drei Tabellen die letzte?

          Comment


          • #6
            Das sollte so funktionieren. Die Tabellen werden anhand der user_id zusammengejoined und die Daten ausgegeben.
            Warum entspricht das nicht deinen Anforderungen?
            Christian

            Comment


            • #7
              Weil da 1. als user.user_id die abonniert.user_id verwendet wird und nicht die abonniert.abonniert_id (vlt habe ich mich da etwas unklar ausgedrückt) und 2. werden alle Datensätze ausgegeben, nicht nur die, die von der abonniert.user_id = 1 abonniert wurden

              Comment


              • #8
                Dann ergänze das Statement um
                ....where
                .user_id = 1


                user.user_id die abonniert.user_id verwendet wird und nicht die abonniert.abonniert_id
                Worin liegt da der Sinn? Die
                abonniert.abonniert_id ist die ID jedes Datensatzes in dieser Tabelle, oder nicht?

                Das Konstrukt
                FOREIGN KEY(user_id) REFERENCES user(user_id),
                FOREIGN KEY(abonniert_id) REFERENCES user(user_id)

                halte ich für falsch. Warum soll die abonniert_id auf die user.user_id refrenzieren? Das tu schon die user_id in der Tabelle
                Christian

                Comment


                • #9
                  Ich muss in der abonniert Tabelle doch 2 mal auf user referenzieren, weil ein user einen anderen abonniert

                  Originally posted by Christian Marquardt View Post

                  Worin liegt da der Sinn? Die [LEFT][COLOR=#252C2F][FONT=Helvetica][SIZE=13px]abonniert.abonniert_id ist die ID jedes Datensatzes in dieser Tabelle, oder nicht?
                  nein ich möchte ja aus jetzt zum Beispiel user (angenommen ich hätte 10000 user) nur die 3 herausnehmen die von der user_id = 1 abonniert wurden.

                  und erweitern um WHERE .user_id = 1 geht auch nicht weil ich dann zwar nur die Datensätze angezeigt bekomme die ich haben will, allerdings wird für username immer mein eigener angezeit und nicht der der Leute die ich abonniert habe

                  Comment


                  • #10
                    Ich habs:
                    Code:
                     SELECT user.username, beschreibung.url, abonniert.abonniert_id FROM abonniert
                     LEFT JOIN user ON user.user_id = abonniert.abonniert_id
                     LEFT JOIN beschreibung ON beschreibung.user_id = abonniert.abonniert_id
                     WHERE abonniert.user_id = 1
                    Trotzdem danke für die Hilfe, ohne den Ansatz hätte ichs nicht geschafft

                    Comment

                    Working...
                    X