SQL-Abfrage über 2 Tabellen ausführen

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

  • SQL-Abfrage über 2 Tabellen ausführen

    Hallo...

    ich programmiere zur Zeit ein kleines Linkscript und habe eine großes Problem...mir fällt einfach keine Lösung mehr ein und ich hoffe, dass ich hier etwas Hilfe finden kann...

    Ich nutze für das Script folgende Tabellen:


    Kategorien
    id | int(11)
    titel | varchar(120)
    typ | int(11)
    bereich | int(11)

    Links
    id | int(11)
    titel | varchar(120)
    link | varchar(120)
    status | int(11)
    bereich | int(11)

    Beim Aufbau der Kategorietabelle sieht es so aus, dass alle Datensätze, die in der Spalte "Typ" den Wert "0" stehen haben, als Hauptkategorie gewertet werden. Die Subkategorien besitzen dann in dieser Spalte der Wert "1". In der Spalte "Bereich" steht dann bei den Subkategorien die ID der jeweiligen Hauptkategorie.

    Nun suche ich auf der Startseite mit folgendem Code nach der Gesamtzahl der Links einer jeweiligen Kategorie:



    PHP-Code:
    anzahl_1 mysql_query("SELECT count(*) as anzahl_1 from $links WHERE bereich='$d1[id]' AND status='0' OR bereich='$d1[id]' AND status='1'");
    $anzahl_1 mysql_fetch_array($anzahl_1);
    $gesamt $anzahl_1[0]; 
    Bie der Variable $d1[id] handelt es sich dabei um die ID der jeweiligen Kategorie. Nun sucht dieses Abfrage allerdings nur die Links der Hauptkategorie aus der Datenbank. Die Links jeweiligen Unterkategorien werden nicht mitgezählt.

    Ich hoffe, dass ich das ganze jetzt nicht zu verwirrend beschrieben habe und mir jemand bei meinem Problem helfen kann...wie gesagt...ich möchte "nur", dass die Links in den jeweiligen Unterkategorien mitgezählt werden.

    Schon einmal vielen Dank für die Hilfe....
    Mfg,

    Schoppy

  • #2
    du kannst ja mit einer schleife nun auch tiefer gehen und dort noch einmal eine suche starten.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Hallo...

      ja...die Idee hatte ich im Prinzip auch, doch wahrscheinlich mache ich dabei immer etwas falsch....könntest du bitte ein Beispiel posten ??? Wäre echt nett...
      Mfg,

      Schoppy

      Kommentar


      • #4
        mag sein, dass es nett ist, aber das muss nicht sein. ich habe dir eigentlich eine anregung gegeben, die du selber umsetzen kannst.

        recursion ist das stichwort als weitere anregung.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Danke...aber ich habe nicht besonders viel Ahnung von der Materie und das Stichwort hilft mir nicht wirklich weiter...

          Auch wenn ich in diesem Forum nach dem Stichwort suche, dann erhalte ich keine Beiträge die mich nach vorne bringen.

          Ich habe es jetzt mal so probiert, doch das Ergebnis ist eine Fehlermeldung !!

          PHP-Code:
          $anzahl_1 mysql_query("SELECT count(*) as anzahl_1 from $links WHERE bereich='$d1[id]' AND status='0' OR bereich='$d1[id]' AND status='1'");
          $anzahl_1 mysql_fetch_array($anzahl_1);
          $gesamt $anzahl_1[0];

          $sql mysql_query("SELECT * FROM $kategorie WHERE bereich=bereich='$d1[id]'");
          while (
          $d2mysql_fetch_array($sql)) {
                 
          $anzahl_2 mysql_query("SELECT count(*) as anzahl_2 from $links WHERE bereich='$d2[id]' AND status='0' OR bereich='$d2[id]' AND status='1'");
                 
          $gesamt $gesamt $anzahl_2[0];

          Was mache ich denn falsch ???
          Mfg,

          Schoppy

          Kommentar


          • #6
            Ich habe es jetzt mal so probiert, doch das Ergebnis ist eine Fehlermeldung !!
            kannst du diese meldung bitte noch einmal posten. irgendwie konnte ich die nicht lesen. wahrscheinlich spinnt aber nur mein bildschirm.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Fehlermeldung

              Kein Problem...es erscheint folgende Meldung:

              PHP-Code:
              Warningmysql_fetch_array(): supplied argument is not a valid MySQL result resource 
              Da ich zur Zeit 10 Kategorien definiert habe, erscheint diese Meldung auch 10x...eben für jede Kategorie einmal...
              Mfg,

              Schoppy

              Kommentar


              • #8
                achja.....

                aus
                bereich=bereich='$d1[id]'");

                mache mal
                bereich='$d1[id]'");
                INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                Kommentar


                • #9
                  Hallo...

                  auch das klappt leider nicht...ich poste mal das ganze Script:

                  PHP-Code:
                  //Aktion - Start
                  if ($act == 'start')
                      {
                      
                  $gesamtlinks mysql_query("SELECT count(*) as gesamtlinks from $links WHERE status='0' OR status='1'");
                      
                  $gesamtlinks mysql_fetch_array($gesamtlinks);
                      
                      
                  // Daten auslesen
                      
                  $r1 MySQL_QUERY("SELECT * FROM $kategorie WHERE typ=0 ORDER BY id ASC");

                      
                  // Ausgabe
                      
                  $tr 0;
                      echo 
                  "<br><br><table border=0 align='center'>";
                      while (
                  $d1mysql_fetch_array($r1)) {
                          
                  $anzahl_1 mysql_query("SELECT count(*) as anzahl_1 from $links WHERE bereich='$d1[id]' AND status='0' OR bereich='$d1[id]' AND status='1'");
                      
                  $anzahl_1 mysql_fetch_array($anzahl_1);
                      
                  $gesamt $anzahl_1[0];

                      
                  $sql mysql_query("SELECT * FROM $kategorie WHERE bereich='$d1[id]'");
                      while (
                  $d2mysql_fetch_array($sql)) {
                              
                  $anzahl_2 mysql_query("SELECT count(*) as anzahl_2 from $links WHERE bereich='$d2[id]' AND status='0' OR bereich='$d2[id]' AND status='1'");
                              
                  $gesamt $gesamt $anzahl_2[0];
                              }
                          
                          
                  $kategorie $d1[titel];
                          
                  $kategorie urlencode($kategorie);
                      
                      
                          
                  $tr++;
                          if (
                  $tr == 1) {
                              echo 
                  "<tr>";
                              }
                          echo 
                  "<td>";

                          echo 
                  "<table border=0 align=center cellspacing=0 cellpadding=0 bgcolor='".$c1[td_border]."'><tr><td align=center>";
                          echo 
                  "<table border=0 align=center cellpadding=0 cellspacing=0 width=225 bgcolor='".$c1[td_content]."'>";
                          echo 
                  "<td class=content width=20><img src='".$c2[root]."/images/shared/icon_folder_yellow.gif'></td><td><b> <a href='".$c2[root]."/pages/links/detail.php?act=show&cat=".$d1[id]."&titel=".$kategorie."' class=content>".$d1[titel]."</a></b> (".$gesamt.")</td>";
                          echo 
                  "<tr><td></td><td class=smallgrey>".$d1[beschreibung]."</td></tr>";
                          echo 
                  "</table>";
                          echo 
                  "</td></tr></table>";

                          echo 
                  "</td>";
                          
                          if (
                  $tr == 2) {
                              echo 
                  "</tr>";
                              
                  $tr 0;
                              }
                          }

                          if (
                  $tr == 1) {
                              echo 
                  "</tr>";
                              }
                      echo 
                  "<tr><td align=center class=smallgrey colspan=2><hr size='1' noshade color='#666666'>Derzeit befinden sich <font color='#000000'><b>".$gesamtlinks[0]."</b></font> Links in unserer Datenbank</td></tr>";
                      echo 
                  "</table><p>";
                      } 
                  Vielleicht hilft dir das ein wenig weiter...ich verzweifel hier noch...
                  Mfg,

                  Schoppy

                  Kommentar


                  • #10
                    auch das klappt leider nicht...
                    was passiert??????



                    erklär mal bitte, was du hier machst (machen willst) und was du im code hast.
                    schaue dir mal genau die schleifen an. das macht doch so keinen sinn. oder?
                    PHP-Code:
                        while ($d1mysql_fetch_array($r1)) {
                            
                    $anzahl_1 mysql_query("SELECT count(*) as anzahl_1 from $links WHERE bereich='$d1[id]' AND status='0' OR bereich='$d1[id]' AND status='1'");
                        
                    $anzahl_1 mysql_fetch_array($anzahl_1);
                        
                    $gesamt $anzahl_1[0];

                        
                    $sql mysql_query("SELECT * FROM $kategorie WHERE bereich='$d1[id]'");
                        while (
                    $d2mysql_fetch_array($sql)) {
                                
                    $anzahl_2 mysql_query("SELECT count(*) as anzahl_2 from $links WHERE bereich='$d2[id]' AND status='0' OR bereich='$d2[id]' AND status='1'");
                                
                    $gesamt $gesamt $anzahl_2[0];
                                } 
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      Hallo...

                      die Fehlermeldung ist noch immer die gleiche... (Auf die Frage was passiert)

                      PHP-Code:
                      while ($d1mysql_fetch_array($r1)) {
                      //Hier möchte ich die Summe aller Links finden, die in einer bestimmten Kategorie sich befinden ($d1[id]) und den Status 1 oder 0 besitzen
                      $anzahl_1 mysql_query("SELECT count(*) as anzahl_1 from $links WHERE bereich='$d1[id]' AND status='0' OR bereich='$d1[id]' AND status='1'");
                      $anzahl_1 mysql_fetch_array($anzahl_1);

                      //Hier weise ich der Variable $gesamt einen Wert aus der voherigen Abfrage zu
                      $gesamt $anzahl_1[0];

                      //Nun suche ich alle Kategorien raus, die im Feld Bereich, die gleichen Wert stehen haben, wie die Links, die zuvor gesucht wurden
                      $sql mysql_query("SELECT * FROM $kategorie WHERE bereich='$d1[id]'");
                      while (
                      $d2mysql_fetch_array($sql)) {

                      //Hier suche ich nun wieder die Anzahl der Links, die sich in den Kategorien befinden, die mit der Abfrag zuvor ermittelt wurden und ebenfalls den Status 1 oder 0 besitzen
                      $anzahl_2 mysql_query("SELECT count(*) as anzahl_2 from $links WHERE bereich='$d2[id]' AND status='0' OR bereich='$d2[id]' AND status='1'");

                      //Hier erhöhe ich den Wert der Variable $gesamt um die ermittleten Summen
                      $gesamt $gesamt $anzahl_2[0];
                                  } 
                      Ist bestimmt alles falsch was ich da gemacht habe, oder ?
                      Mfg,

                      Schoppy

                      Kommentar


                      • #12
                        ich würde dir empfehlen eine fkt dafür zu machen und diese soll sich recursiv aufrufen.
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          Ehrlich gesagt hilft mir das auch keinen Schritt weiter, denn dazu müßte ich trotzdem wissen wie man das programmiert und genau da liegt doch mein Problem.
                          Mfg,

                          Schoppy

                          Kommentar


                          • #14
                            dann schlage ich spontan vor, dass du dir ein buch nimmst...

                            im grund ist es doch aber ganz einfach.

                            du hast eine fkt, die dir aus einer definierten ebene die werte gibt.
                            innerhalb dieser fkt rufst du die fkt wieder auf, jedoch mit anderen startwerten. usw. natürlich musst du immer brav rückgaben machen,
                            dass die aufrufende fkt die infos erhält. anderenfalls wird dein rechner
                            blockiert, weil die recursion unendlich laufen würde .
                            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                            Kommentar

                            Lädt...
                            X