mal wieder Joins

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

  • mal wieder Joins

    Hi @ all,
    ja, ich habe Google und die Forums-Suche benutzt,
    habe auch Bücher zum Thema....es klappt trotzdem nicht :-(
    Den Thread über Joins habe ich auch gelesen. Im Endeffekt
    steht ja überall das Gleiche drinnen, was mir aber den Fehler
    nicht erklärt.

    Folgende Struktur :
    Tabelle 1
    -rubrik_id
    -name
    -top_rub
    -sub_show

    Tabelle 2
    -artikel_id
    -artikel
    -beschreibung
    -rubrik

    Aufgabe :
    Aus der Tabelle 2 ALLE Artikel ziehen, die in Tabelle 1 mit der übergebenen "top_rub" übereinstimmen.

    Im Klartext möchte ich eine Auflistung aller in mehreren Unterkategorie befindlichen Artikel bereits in einer Hauptkategorie als Übersicht anzeigen lassen.

    Mein Code :
    PHP-Code:
    $res mysql_db_query($dbase"SELECT artikel.* FROM artikel LEFT
    JOIN rubrik ON artikel.rubrik = rubrik.rubrik_id WHERE 
    rubrik.top_rub = 
    $rb "); 
    $rb ist der übergebene Wert der Hauptkategorie.

    Nach meinem Code bekomme ich aber immer nur die als erstes
    gefundenen Artikel, nicht alle verfügbaren bzw. passenden.

    Ich weiß, ist ein leidiges Thema, aber ich weiß mir im Moment
    nicht anders zu Helfen als zu fragen.

    M.f.G.

    Dirk-Kiel
    Zuletzt geändert von Dirk-Kiel; 16.08.2005, 09:53.

  • #2
    Dieses Thema ist noch viel leidiger...

    Kommentar


    • #3
      Hi,

      wenns um die Breiten-Formatierung bis max 1024px ging,
      habe ich eben gerade behoben.

      M.f.G.

      Kommentar


      • #4
        Hm... kann es sein, dass die Tabelle rubrik von der Struktur id->parentid?

        Kommentar


        • #5
          Jupp, zeig mal ein paar testdaten (welche, die ausgegeben werden, und welche die fehlen). vielleicht liegt der fehler daran, an der query kann ich nichts entdecken.

          Kommentar


          • #6
            Beispiele

            Übergebener Wert $rb = die ID der Top-Kategorie "359"

            In Tabelle 1 Rubrik:
            rubrik_ID rubrik top_rub
            314 Name1 359
            315 Name2 359
            316 Name3 360

            Tabelle 2 Artikel:
            artikel_id artikel rubrik
            001 Text1 314
            002 Text2 315
            003 Text3 316

            Ausgabe über meine Syntax ist :
            alles von "rubrik_ID" 314 also Text1.

            Ergebnis soll aber sein :
            alles von top_rub 359 also Text1 und Text2

            Wo liegt der Hase im Pfeffer ???

            CU

            Kommentar


            • #7
              Wie wärs hiermit?

              PHP-Code:
              $res mysql_db_query($dbase"SELECT artikel.* FROM artikel 
              JOIN rubrik ON artikel.rubrik = rubrik.rubrik_id WHERE 
              rubrik.top_rub = 
              $rb "); 

              Kommentar


              • #8
                Hi,

                danke für die Antwort.
                Aber das scheints nicht zu sein, jetzt ist ein SQL-Fehler drinnen :

                You have an error in your SQL syntax near 'ON artikel.rubrik = rubrik.rubrik_id WHERE rubrik.top_rub = 359 ' at line 1

                Mit LEFT JOIN habe ich zwar zu wenig Treffer, aber ohne LEFT geht gar nix mehr :-(

                Noch ne Idee ?

                Ich habe auch schon die Tabellen-Spalten explizit angegeben anstelle des "*" nach SELECT, keine Änderung im Verhalten :-(

                CU

                Kommentar


                • #9
                  Hallo,

                  habe nun ne Menge rumprobiert mit LEFT JOIN und muß sagen, es klappt.
                  Auch bei $num = mysql_num_rows($res); ist die korrekte
                  Treffermenge 10 die es sein sollte.
                  Der weitere Fehler liegt wohl beim Auslesen der einzelnen Zeilen der
                  Treffer, denn dort bekomme ich nur die zwei ersten der ersten Unterkategorie nicht alle 10 passenden :

                  PHP-Code:
                  $num mysql_num_rows($res);

                  for (
                  $i=0$i<$num$i++) {
                          
                  $isbn mysql_result($res$i"isbn");
                          
                  $titel mysql_result($res$i"titel");
                          
                  $untertitel mysql_result($res$i"untertitel");
                          
                  $kurztext mysql_result($res$i"kurztext");
                          
                  $langtext mysql_result($res$i"langtext");
                          
                  $preis mysql_result($res$i"preis");
                          
                  $image mysql_result($res$i"image");
                          
                  $artikel_id mysql_result($res$i"artikel_id");

                  CU

                  Kommentar


                  • #10
                    Ihhhhhhhh......

                    schau dir mal bitte mysql_fetch_array an.... und, wenn ich hier ne Query Poste hab ich die natürlich nicht geprüft. Aber sie sollte so funktionieren.

                    PHP-Code:
                    SELECT FROM bla JOIN blub ON(blub.id bla.idWHERE bla.foo 'hui' 
                    Damit bekommst du alle Datensätze in 'bla' die auch einen "verketteten"-Eintrag in 'blub' haben.

                    Kommentar


                    • #11
                      Hi @prego,

                      danke für den Tipp, aber genau in dieser Select-Zusammenstellung
                      taucht immer wieder der Fehler auf, dass "near ON" ein Syntax-Fehler ist.

                      Rein logisch gesehen, geb ich deiner Syntax ja recht, aber eine Abfrage
                      findet nicht statt.

                      Habe jetzt alles in 2 Schleifen gepackt, einmal in "for" zur Zählung
                      aller Zeilen und in "while" zur Ausgabe aller Inhalte je Zeile.

                      Was mir nun aufgefallen war ist, dass nur die Anzahl aller Unterkategorien
                      stimmen, aber nicht aller Artikel.

                      CU

                      Kommentar


                      • #12
                        Original geschrieben von Dirk-Kiel
                        Hi @prego,

                        danke für den Tipp, aber genau in dieser Select-Zusammenstellung
                        taucht immer wieder der Fehler auf, dass "near ON" ein Syntax-Fehler ist.
                        Leerzeichen nach ON einfügen, dann sollte es funz. Die () sind aber auch sowas von überflüssig

                        Kommentar


                        • #13
                          asp2php: ich mach es lieber mit () da ich es dann übersichtlicher finde, wenn man die Query ohne Zeilenumbrüche zum debuggen wieder auspackt.

                          Oder ist das deprecated?

                          Kommentar


                          • #14
                            wenn man die Query ohne Zeilenumbrüche zum debuggen
                            Was ist das den für ein unsinn? Füg' an den richtigen Stellen umbrüche ein, lass die da und du hast immer ne vernüftige Zeilenangabe bei den Fehlermeldungen und keinerlei Probleme beim Debuggen.

                            Kommentar


                            • #15
                              Ich denke das bleibt meinem Stil überlassen. Im Code habe ich Zeilenumbrüche. Nur erklär mich doch mal einer, was es mit den Klammern auf sich hat. Warum sind die böse?

                              Kommentar

                              Lädt...
                              X