abfrage über 2 Tabellen, falsche Ausgabe....

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

  • abfrage über 2 Tabellen, falsche Ausgabe....

    hallo forum,

    PHP-Code:
        $abfrage="SELECT links_links.*, count(*) AS count, links_category.*  FROM links_links, links_category GROUP BY links_category.category_name";

        
    $ergebnis mysql_query($abfrage);
        
    $num_rows mysql_num_rows($ergebnis);
        if (
    $num_rows ==0)
        {
        echo 
    "Kein Ergebnis";
        }
        else
        {
        while(
    $row mysql_fetch_array($ergebnis))
        {

                echo 
    " ID:".$row[category_id]." | ";
                echo 
    " Name: ".$row[category_name]." |  ";
                echo 
    " Anzahl: ".$row[count]."   ";
                echo
    "<br><hr>";
            }
        } 
    liefert mir folgendes ergebnis:

    ID: 1 | Name: design | Anzahl: 8

    --------------------------------------------------------------------------------
    ID: 2 | Name: Flash | Anzahl: 8

    --------------------------------------------------------------------------------
    ID: 6 | Name: Fonts | Anzahl: 8

    es sind aber jweils 3,3,2 einträge pro kategorie,
    kann mir wer sagen, was ich falsch gemacht habe.

    danke und gruss
    bastian

  • #2
    Nehmen wir an, wir haben zwei Tabellen:

    1. Master-Tabelle 'mt':
    id int(11) auto_increment,
    master_name VARCHAR(20)

    2. Detail-Tabelle 'dt':
    id int(11) auto_increment,
    mt_id int(11),
    detail_name VARCHAR(40)

    Dann können wir mit folgender Anweisung den Namen des Eintrags der Mastertabelle und die Anzahl der passenden Detail-Einträge so ermitteln:
    PHP-Code:
    SELECT
      mt
    .master_name,
      
    count(dt.id)
    FROM
      dt
    ,
      
    mt
    WHERE
     mt
    .id dt.mt_id
    GROUP
      BY dt
    .mt_id
    Bei dir ist die Master-Tabelle links_category und die Detail-Tabelle links_links, oder?!

    Noch Fragen?

    PHP-Code:
    SELECT
      links_category
    .category_id,
      
    links_category.category_name,
      
    count(links_links.id)
    FROM
      links_category
    ,
      
    links_links
    WHERE
      links_category
    .category_id links_links.category_id
    GROUP BY
      links_links
    .id
    Zuletzt geändert von cst; 13.07.2004, 15:57.
    Ich denke, also bin ich.
    Manche sind trotzdem!

    Kommentar


    • #3
      Kurz erklärt: Es fehlt die verknüpfende Bedingung. Ohne eine solche bildet die Datenbank lediglich das Karthesische Produkt (Jeder Datensatz mit jedem), welches in Deinem Falle, beim zusammenzählen immer 8 liefert, da in der Detailtabelle eben 8 Datensätze stehen.

      Einen entsprechenden Lösungshinweis findest Du entweder im Manual der MySQL oder in cst's Posting ...
      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


      • #4
        isch liebe äs. klasse forum - tolle member!

        danke für deine ausführliche erklärung cst.

        @goth: jetzt weiss ich endlich was die alle mit "Karthesische Produkt"
        meinen ;-)

        besten gruss an euch
        bastian

        btw: muss ich noch sagen, das es sofort geklappt hat?
        b.
        Zuletzt geändert von bastian; 14.07.2004, 08:37.

        Kommentar


        • #5
          ähm, will net unverschämt sein, aber kann mir
          einer nochmal kurz und in - für einen laien verständlichen worten - erklären,
          was es mit leftjoin crossjoin auf sich hat...

          sehe das so oft, und hab auch schon versucht das ganze nachzuvollziehen, aber die meisten erläuterungen sind eher kryptischer natur.

          gruss
          b.

          Kommentar

          Lädt...
          X