Problem mit Schleife und Left Join

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

  • Problem mit Schleife und Left Join

    Ich komme einfach nicht drauf und brauche eure Hilfe !

    Ich habe 2 Tabellen. Tabelle1 -> Kategorie (id, bezeichnung), Tabelle 2 -> (id, idtab1, text)

    Nun möchte ich alle bezeichnungen der Tabelle 1 ausgeben.
    SELECT * FROM Kategorie;
    -> Funktioniert ja auch.

    Nun möchte ich aber, dass zu jedem ausgegebenen Datensatz, den ich mit dem SELECT Befehl aus der Tabelle Kategorie hole, die Anzahl der Datensätze ausgegeben wird, welche dieses Kriterium erfüllen:
    -> zähle die Anzahl der Datensätze, wo id (Tabelle1) = idtab1 (Tabelle2) ist und gebe diese zu jeder Kategorie aus.

    Hoffe das ist verständlich.
    Hier nochmal ein Beispiel:
    Tabelle 1 -> id=1, bezeichnung=Computer
    id=2, bezeichnung=Auto
    Tabelle 2 -> id=1, idtab1=1, text=PC
    id=2, idtab1=2, text=VW
    id=3, idtab1=2, text=BMW

    Ausgabe: Computer (1), Auto (2)

    So würde ich das gerne haben, komme aber nicht so ganz damit klar.

  • #2
    Dann solltest Du mal nach GROUP BY ... und der Aggregatfunktion COUNT() suche ...

    Ich habe das mal vorbereitet: http://dev.mysql.com/doc/mysql/searc...set=iso-8859-1
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      finde den Fehler nicht

      <?php
      $i = 1;

      $sql = mysql_query("SELECT * FROM kategorie");
      while ($result = mysql_fetch_array($sql)) {

      echo "<td bgcolor='#f3f3f3' valign='top'>";
      echo $result[bezeichnung]; ?>

      $count = mysql_query("SELECT COUNT(*) as gesamtanz from artikel LEFT JOIN kategorie ON kategorie.id=artikel.tab1id");

      $anzahl = mysql_fetch_array ($count);
      echo '('.$anzahl[gesamtanz].')';

      echo '</td>';
      $i++;
      if ($i == "4"){
      echo '</tr><tr>';
      $i = 1;
      }
      }
      ?>

      Als Ergebnis bekomme ich dann:

      Computer (2), Auto (2)

      Er zählt einfach alle Datensätze aus der Tabelle artikel aber ordnet sie nicht der jeweiligen Kategorie zu, also zum Beispiel
      Computer(1), Auto (2)

      Das ist doch bestimmt ein Fehler in der While Schleife oder?
      Finde ihn aber nicht

      Kommentar


      • #4
        du hast das group by vergessen...
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          hmmm

          $count = mysql_query("SELECT COUNT(*) as gesamtanz from artikel LEFT JOIN kategorie ON kategorie.id=artikel.tab1id");


          Wenn ich daraus jetzt mache:
          $count = mysql_query("SELECT COUNT(*) as gesamtanz from artikel LEFT JOIN kategorie ON kategorie.id=artikel.tab1id GROUP BY artikel.tab1id");

          -> Dann bekomme ich auch:

          Computer(2), Auto(2)

          Als Datensätze habe ich aber:
          DS1: tab1id = 1 (Computer)
          DS2: tab1id = 1 (Computer)
          DS3: tab1id = 2 (Auto)

          Müsste also so aussehen:
          Computer(2), Auto(1)

          Kommentar


          • #6
            Dein Freund heisst distinct, und hilf mySQL sich nicht zu verzählen
            h.a.n.d.
            Schmalle

            http://impressed.by
            http://blog.schmalenberger.it



            Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
            ... nur ohne :-)

            Kommentar


            • #7
              weil heut feiertag is:
              PHP-Code:
              $sql 'SELECT
                k.bezeichnung,
                COUNT (a.id) anzahl
              FROM
                kategorie k
                LEFT JOIN artikel a ON k.id = a.id
              GROUP BY k.bezeichnung
              ORDER BY k.bezeichnung'
              ;
              $r mysql_query($sql) or die(mysql_error());
              echo 
              '<table>';
              while (
              $row mysql_fetch_assoc($r))
                echo 
              '<tr><td>'.$row['bezeichnung'].'</td><td>'.$row['anzahl'].'</td></tr>';
              echo 
              '<table>'
              probier das mal, eventuell noch die spaltennamen anpassen
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Original geschrieben von mrhappiness
                [B]weil heut feiertag is
                OffTopic:
                Aber nur in den faulen Bundesländern
                h.a.n.d.
                Schmalle

                http://impressed.by
                http://blog.schmalenberger.it



                Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                ... nur ohne :-)

                Kommentar


                • #9
                  mich hat's auch mal erwischt, is verdammt doof...

                  aber jeder wie er's verdient

                  außerdem: ich hab ja nie von bundeseinheitlichem feiertag geredet
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Original geschrieben von mrhappiness
                    weil heut feiertag is:[php]$sql = 'SELECT
                    k.bezeichnung,
                    COUNT (a.id) anzahl
                    FROM
                    kategorie k
                    LEFT JOIN artikel a ON k.id = a.id
                    GROUP BY k.bezeichnung
                    ORDER BY k.bezeichnung';
                    Das könnte (ohne distinct) falsche Ergebnisse bringen ... !
                    carpe noctem

                    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                    Kommentar


                    • #11
                      warum?
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Ja ... du hast recht ... ich habe falsch geschaut ... !
                        carpe noctem

                        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                        Kommentar


                        • #13
                          grrrrrr

                          Mist irgendwie will das nicht

                          Könntet ihr mir vielleicht nochmal helfen? (is ja bald Weihnachten )))

                          $sql = 'SELECT k.hauptbez, COUNT (a.drp1id) anzahl FROM hauptkat k LEFT JOIN artikel a ON k.hauptid = a.drp1id GROUP BY k.hauptbez ORDER BY k.hauptbez';

                          also hab das jetzt so, aber geht nicht
                          MYSQL Error

                          Die Tabellen sind: hauptkat (hauptid, hauptbez)
                          artikel (id, drp1id)

                          Jetzt sollen alle hauptbez ausgegeben werden und dahinter jeweils die Anzahl der Datensätze aus artikel, wo drp1id=hauptid ist.


                          Dankeeeeeee

                          Kommentar


                          • #14
                            Re: grrrrrr

                            Original geschrieben von IceT
                            MYSQL Error
                            fehlermeldung?
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              fehler

                              You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(a.drp1id) anzahl FROM hauptkat k LEFT JOIN artikel a ON k.haup

                              Kommentar

                              Lädt...
                              X