Tabellen miteinander verknüpfen... Brauche Hilfe...

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

  • Tabellen miteinander verknüpfen... Brauche Hilfe...

    Hallo!

    Ich habe ein kleines Problemchen. Ich schildere erst einmal meinen Aufbau und ein paar PHP-Dinge.

    Ich habe eine Datenbank ("DatenbankX") und darin befinden sich 3 Tabellen:

    news_kategorien
    - kategorie_id
    - kategorie_title
    - kategorie_kurzform

    news_posts
    - posts_id
    - posts_title

    news_kategorien_posts
    - kategorie_id
    - posts_title

    Das sind jeweils die Tabellennamen und die Spaltennamen.

    Nun übergebe ich in PHP per GET einen Wert aus news_kategorien, und zwar tabelle3kurzform.

    Nun muss ich über die Kurzform (Feld "kategorie_kurzform") an die entsprechende id gelanden (Feld "kategorie_id"). Habe ich diese herausgefunden, kann ich nachschauen, ob es in news_kategorien_id einen oder mehrere Einträge gibt, in denen die ID aus news_kategorien in der Spalte kategorie_id vorkommt. Dann kann ich das Feld "posts_id" auslesen und in der news_posts nach der ID suchen...

    ...hört sich komplizierter an, als es ist. In der Tabelle "news_kategorien" sind eben alle Kategorien aufgelistet. In der Tabelle "news_posts" alle Postings und die Tabelle "news_kategorien_posts" verwaltet die Zugehörigkeit von Post und Kategorie.

    Bisher bin ich immer wie folgt vorgegangen:

    -> Ermitteln von $_GET
    -> SQL-Abfrage nach der passenden ID zu "kategorien_kurzform"
    -> SQL-Abfrage mit Tabelle "news_kategorien_posts" und alle "posts_id" in ein Array geschrieben.
    -> Das Array "explodieren" lassen und einen String erstellt (for each... $string .= AND (id = x))
    -> Neue SQL-Abfrage mit dem gerade erstellten String

    D.h. ich habe drei Abfragen benötigt...

    ...gibt es da nicht auch eine einfachere Möglichkeit?

    Ist ja nicht so, als wenn ich mich nicht selbst damit beschäftigt hätte, aber ich komme nicht weiter. Ohne es erklären zu können, habe ich folgende SQL-Abfrage generiert:

    Code:
    SELECT
       *
    FROM
       news_posts
    WHERE
       ($ermittelte_id = news_kategorien_posts.kategorie_id)
    AND
       (news_posts.posts_id = news_kategorien_posts.post_id)
    Da bekomme ich allerdings einen Fehler und ich muss vorher immer noch die ID der Kurzform auslesen...

    ...Hat jemand einen Hinweis für mich? Auch ein Link wird gerne angenommen (auch wenn ich schon viel gelesen habe)...

  • #2
    Beschäftige dich mit JOINs.
    http://aktuell.de.selfhtml.org/artikel/datenbanken/
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hab ich ja... Derzeit sieht es so aus:

      Code:
      SELECT 
         *
      FROM 
         news_posts as posts
      INNER JOIN
         news_kategorien_posts as katid
      ON
         (katid.kategorie_id = $ausgeleseneidderkurzform)
      AND
         (posts.post_id = katid.post_id);
      So funktioniert es auch... Nur muss ich immer noch die ID der Kurzform zuvor auslesen und in einen String speichern...

      Kommentar


      • #4
        Zitat von DumbleOpun Beitrag anzeigen
        Nur muss ich immer noch die ID der Kurzform zuvor auslesen und in einen String speichern...
        Nein, musst du nicht, du kannst alle drei Tabellen miteinander verknüpfen.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          PHP-Code:
          SELECT 
             
          *
          FROM 
             
          (news_posts as posts
             INNER JOIN
                news_kategorien 
          as kategorie   
                ON
                   kategorie
          .kategorie_kurzform "'.$_GET['kategoriekurzform'].'"'; 
          INNER JOIN
             news_kategorien_posts as katid
          ON
             (katid.kategorie_id = kategorie.kategorie_id)
          AND
             (posts.post_id = katid.post_id); 
          Soweit bin ich nun, und so weit funktioniert es auch.

          Problem: Ich bekomme immer nur eine Kategorie mit ausgelesen, auch wenn "news_kategorien_posts"->"post_id" dort mehrmals vorhanden ist (weil ein Post z.B. in 2 oder mehreren Kategorien steckt)...

          Gibt es dafür auch eine Lösung, oder muss ich dann noch auf 2 SQL-Abfragen hinaus?

          Kommentar


          • #6
            Zitat von DumbleOpun Beitrag anzeigen
            Gibt es dafür auch eine Lösung, oder muss ich dann noch auf 2 SQL-Abfragen hinaus?
            Sieh dir nochmal an, welche Bedingungen man in die on-Klausel eines Joins packt und welche in die where-Klausel gehören.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Zitat von AmicaNoctis Beitrag anzeigen
              Sieh dir nochmal an, welche Bedingungen man in die on-Klausel eines Joins packt und welche in die where-Klausel gehören.
              Sorry, aber hast du vielleicht noch einen Tipp?

              Kommentar


              • #8
                Mit on macht man in der Regel nichts anderes, als MySQL mitzuteilen, wie eine Tabelle mit einer anderen verknüpft werden muss. In deiner Abfrage hast du aber globale Kriterien da mit reingemischt die in die where-Klausel gehören.

                Also: benutze on (mit o wie ein „Ehering“), um MySQL über die Beziehungen zwischen zwei Tabellen zu informieren und where, um irgendwelche anderen Bedingungen festzulegen (w wie das „Wetter”).
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar

                Lädt...
                X