Kategorien auslesen ?!

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

  • Kategorien auslesen ?!

    Moin alle zusammen !!
    Hab da mal wieder ein PROBLEM das ich gerne mit euch teilen wollte ! *g*
    Und zwar möchte ich ein Kategorie basiertes Linksystem aufbauen und hab eine Tabelle mit folgendem aufbau für die Kategorien:
    ID, PID, SID, KatName

    Die zuordnung erfolgt wie folgt
    TopKat:
    ID=PID, SID=0

    ChildKat:
    ID, PID=(ID der TopKat), SID=(ID der übergeordneten Kat)

    Nun kann ich über folgende Function,

    function kat_out($kat_id) {
    $query = "Select * From TBL Where id=$kat_id";
    $result = mysql_query($query) or
    die("Query failed");
    $row = mysql_fetch_array($result);
    echo $row["KatName"], "\n";
    kat_out($row["SID"]);
    }

    zwar die Kategorien auslesen, aber leider nicht in der richtigen reihenfolge !!

    Ich muss zuerst die ID des am ende stehenden eintrages, angeben ($kat_id), und bekomme dann die Kategorien zurück wobei die TopKat am ende steht !!!

    ich brauche aber folgende ausgabe z.B. so:

    TopKat>>ChildKat1>>ChildKat2>>ChildKat3>>usw.
    und zwar mit Link.

    Darunter dann die anderen Kategorien oder Links(in einer anderen Tabelle, zuordnung durch die ID der KAT)

    So ich hoff das war verständlich, und hoffe auf Hilfe !!!

    thx kopfkult
    Kopfkult.de- Der Gamedesign Index
    EMail: vision.arts@kopfkult.de

  • #2
    hmm,

    leider kann ich dir mal nicht folgen, wirst auf Sky warten müssen, oder mal ein Beispiel angeben mit einer Tabelle wo schon werte drin stehen.

    Kommentar


    • #3
      Hab's leider auch nicht verstanden...

      CAT Music Files

      Kommentar


      • #4
        Bsp. Tabelle

        Hier also ein kleines Beispiel:

        ID PID SID KatName
        -----------------------------
        1 1 0 TopKat
        2 1 1 ChildKatA
        3 1 1 ChildKatB
        4 1 2 ChildA1
        5 1 4 ChildAA

        Wenn ich nun die obige Function mit der $Kat_id=5 aufrufe,
        bekomme ich die ergebnisse in folgender reihenfolge:

        ChildAA
        ChildA1
        ChildKatA
        TopKat

        Ich brauche dass ganze aber in umgekehrter reihenfolge, also ich gebe die topkat an und erhalte die ausgabe in etwa dieser form:

        TopKat
        >ChildKatA
        >>ChildA1
        >>>ChildAA
        >ChildKatB

        so ich hoffe das hilft jetzt weiter !?

        cu
        Kopfkult.de- Der Gamedesign Index
        EMail: vision.arts@kopfkult.de

        Kommentar


        • #5
          So sollt's gehen:

          funtion kat_out($id)
          {
          $sid = 1;
          while ($sid) {
          $r = mysql_query("SELECT sid,katname FROM tabelle WHERE id='$id'");
          if ($d = mysql_fetch_array($r)) {
          $sid = $d[sid];
          $id = $eintraege[$i] = $d[katname];
          }
          array_reverse($eintraege);
          for ($i=0;$i<sizeof($eintraege);$i++) {
          echo (($i==0) ? "$eintraege[$i] '" : (str_repeat('>',$i))." $eintraege[$i]");
          }
          }

          CAT Music Files

          Kommentar


          • #6
            So Danke erstmal für eure mühe, aber ich hab einer andere lösung gefunden !!

            Hab aber jetzt ein anderes problem.
            Wie bekomme ich den nächsten auto_increment wert heraus,
            also die id die beim nächsten insert vergeben wird !!??

            thx kopfkult
            Kopfkult.de- Der Gamedesign Index
            EMail: vision.arts@kopfkult.de

            Kommentar


            • #7
              Lass uns doch an deiner Lösung bitte auch teilhaben.

              Zu deiner Frage: mysql_last_insert_id() bzw. LAST_INSERT_ID() in SQL.

              CAT Music Files

              Kommentar


              • #8
                Die Function zu der ersten Sache werde ich hier posten wenn sie fertig ist !! wird wohl bald sein

                Aber zu der 2ten Frage habe ich noch eine bessere Antwort gefunden, und zwar.

                $query = "SHOW TABLE STATUS LIKE 'tbname'";
                $result = mysql_query($query);
                $row = mysql_fetch_array($result);

                $auto_increment = $row[Auto_increment];


                Deine Antwort funktioniert bei mir leider nicht, da ich
                diesen wert viel später auslesen muss
                "mysql_last_insert_id() bzw. LAST_INSERT_ID()"
                Funktionieren doch leider nur wenn dazwischen nicht auf die
                tabelle zugegriffen wurde oder die connection getrennt
                wird ! oder ??????

                cu und thx kopfkult
                vieleicht hilft das ja irgendjemand anders auch weiter !!
                Kopfkult.de- Der Gamedesign Index
                EMail: vision.arts@kopfkult.de

                Kommentar


                • #9
                  Stimmt schon, aber du kannst es ja direkt nach der Query in einer Variable speichern.

                  CAT Music Files

                  Kommentar


                  • #10
                    So hier die komplette function zum darstellen der Kategorien !!



                    Code:
                    function link_out_all($tb_links, $tb_kat, $kat_id, $id) {
                    
                    if (empty($kat_id)){
                    
                       echo ("\n<center><table width='90%' border='0' cellspacing='1' cellpadding='0' bgcolor='#000000'><tr><td>
                             \n<table width='100%' height='100%' border='0' cellspacing='0' cellpadding='0' bgcolor='#003388'>
                             \n<tr><td valign='top'>");
                    
                      
                      
                      echo ("\n<center><table width='100%' border='0' cellspacing='0' cellpadding='10'>");
                    
                    
                      $limit1 = 0;
                      //Datensätze pro zeile
                      $limit2 = 3;
                    
                      //query zur ermittlung der Zeilenanzahl
                      $zeilen_query = "SELECT count(*) AS zeilen FROM $tb_kat WHERE sid='0'";
                      $zeilen_result = mysql_query($zeilen_query);
                      $zeilen = mysql_fetch_array($zeilen_result);
                    
                      $anzahl = ceil(($zeilen[zeilen] / $limit2));
                    
                      for ($zeilen = 1; $zeilen <= $anzahl; $zeilen++) {
                        //zeile 1 start
                        echo ("\n<tr>");
                    
                    
                       //sql query zur ausgabe der HKAT
                       $query01 = "SELECT $tb_kat.id AS id,
                                   $tb_kat.pid AS pid,
                                   $tb_kat.name AS name,
                                   IFNULL(COUNT($tb_links.id),'0') AS anzahl FROM $tb_kat LEFT JOIN $tb_links ON $tb_kat.id=$tb_links.kat
                                   WHERE sid='0' GROUP BY($tb_kat.name) ORDER BY name LIMIT $limit1, $limit2";
                                   
                                   
                       $result01 = mysql_query($query01) or die("Kann Haupkatquery nicht ausfuehren !");
                    
                    
                        while($topkat = mysql_fetch_array($result01))
                           {
                         $pid = $topkat[id];
                    
                         //sql query zur ausgabe der UKAT
                         $query02 = "SELECT $tb_kat.id AS id,
                                     $tb_kat.pid AS pid,
                                     $tb_kat.name AS name,
                                     IFNULL(COUNT($tb_links.id),'0') AS anzahl FROM $tb_kat LEFT JOIN $tb_links ON $tb_kat.id=$tb_links.kat
                                     WHERE sid='$topkat[id]' and pid='$pid' GROUP BY($tb_kat.name) ORDER BY anzahl DESC LIMIT 0, 3";
                    
                         $result02 = mysql_query($query02) or die("Kann Childkatquery nicht ausfuehren !");
                    
                         //spalte 1 start
                         echo ("\n<td width='33%' height='50' align='left' valign='top'>");
                    
                         echo ("<a class='download' href='$PHP_SELF?kat_id=$topkat[id]&id=$topkat[id]'>$topkat[name]</a>\n");
                    
                         echo ("<br>");
                    
                         echo ("<font>");
                    
                         while($chkat = mysql_fetch_array($result02)) {
                           echo ("<a class='menu' href='$PHP_SELF?kat_id=$chkat[id]&id=$chkat[pid]'>$chkat[name]</a>($chkat[anzahl]), ");
                               }
                               
                    
                          //prüfen ob weitere Unterkat vohanden und setzen von punkten !!!
                          $tst_query = "SELECT count(*) AS test FROM $tb_kat WHERE sid='$pid'";
                          $tst_result = mysql_query($tst_query);
                          $tst = mysql_fetch_array($tst_result);
                    
                          if ($tst[test] > 0) echo (" . . .</font>");
                    
                    
                          //ende spalte 1
                          echo ("\n</td>");
                    
                          }
                    
                      $limit1 = $limit1 + $limit2;
                      //ende zeile 1
                      echo ("\n</tr>");
                    
                      }
                    
                    echo ("\n</table></center>");
                    
                    
                    echo ("\n</td></tr></table>
                           \n</td></tr></table></center>");
                    
                    } else {
                           $kat_id_save = $kat_id;
                    
                           do {
                              $top_query = "SELECT $tb_kat.id AS id,
                                            $tb_kat.sid AS sid,
                                            $tb_kat.name AS name FROM $tb_kat
                                            WHERE id='$kat_id' ";
                    
                              $top_result = mysql_query ($top_query) or die ("Kann query nicht ausfuehren !");
                    
                    
                              while($verlauf = mysql_fetch_array($top_result)) {
                    
                                    $array[$verlauf[name]] = $verlauf[id];
                                    $kat_id = $verlauf[sid];
                              }
                    
                           } while ($kat_id > 0);
                    
                    
                           $r_array = array_reverse($array);
                    
                    
                                  echo ("\n<center><table width='90%' border='0' cellspacing='1' cellpadding='0' bgcolor='#000000'><tr><td>
                                  \n<table width='100%' height='100%' border='0' cellspacing='2' cellpadding='0' bgcolor='#003388'>
                                  \n<tr><td valign='top'>");
                    
                    
                           echo "\n<a class='download' href='link_out_all.php'>Home</a>"."<font> >> </font>";
                    
                           while (list ($name, $p_id) = each ($r_array)) {
                    
                                 if ($p_id != $kat_id_save) {
                                    echo "\n<a class='download' href='$PHP_SELF?kat_id=$p_id&id=$id'>$name</a>";
                                 }
                    
                                 if ($p_id == $kat_id_save) {
                                    echo "\n<b><font>$name</font></b>";
                                 }
                    
                    
                                 if ($p_id != $kat_id_save) echo "\n<font>".">>"."</font>";
                              }
                    
                    
                           
                           echo ("\n</td></tr></table>
                                  \n</td></tr></table></center><br>");
                    
                    // Anfang Kat auswahl
                    
                      $limit1 = 0;
                      //Datensätze pro zeile
                      $limit2 = 3;
                    
                      //query zur ermittlung der Zeilenanzahl
                      $zeilen_query = "SELECT count(*) AS zeilen FROM $tb_kat WHERE sid='$kat_id_save' and pid='$id'";
                      $zeilen_result = mysql_query($zeilen_query);
                      $zeilen = mysql_fetch_array($zeilen_result);
                    
                      $anzahl = ceil(($zeilen[zeilen] / $limit2));
                    
                    if ($zeilen[zeilen] > 0) {
                        echo ("\n<center><table width='90%' border='0' cellspacing='1' cellpadding='0' bgcolor='#000000'><tr><td>
                             \n<table width='100%' height='100%' border='0' cellspacing='0' cellpadding='0' bgcolor='#003388'>
                             \n<tr><td valign='top'>");
                    
                      //variablen für die ausgabe
                    
                      
                      echo ("\n<center><table width='100%' border='0' cellspacing='0' cellpadding='10'>");
                    
                    
                      for ($zeilen = 1; $zeilen <= $anzahl; $zeilen++) {
                        //zeile 1 start
                        echo ("\n<tr>");
                    
                    
                       //sql query zur ausgabe der HKAT
                       $query01 = "SELECT $tb_kat.id AS id,
                                   $tb_kat.pid AS pid,
                                   $tb_kat.name AS name,
                                   IFNULL(COUNT($tb_links.id),'0') AS anzahl FROM $tb_kat LEFT JOIN $tb_links ON $tb_kat.id=$tb_links.kat
                                   WHERE pid='$id' and sid='$kat_id_save' GROUP BY($tb_kat.name) ORDER BY name LIMIT $limit1, $limit2";
                    
                       $result01 = mysql_query($query01) or die("Kann Haupkatquery nicht ausfuehren !");
                    
                    
                        while($topkat = mysql_fetch_array($result01))
                           {
                         $pid = $topkat[id];
                    
                         //sql query zur ausgabe der UKAT
                         $query02 = "SELECT $tb_kat.id AS id,
                                     $tb_kat.pid AS pid,
                                     $tb_kat.name AS name,
                                     IFNULL(COUNT($tb_links.id),'0') AS anzahl FROM $tb_kat LEFT JOIN $tb_links ON $tb_kat.id=$tb_links.kat
                                     WHERE sid='$pid' and pid='$id' GROUP BY($tb_kat.name) ORDER BY anzahl DESC LIMIT 0, 3";
                    
                         $result02 = mysql_query($query02) or die("Kann Childkatquery nicht ausfuehren !");
                    
                         //spalte 1 start
                         echo ("\n<td width='33%' height='50' align='left' valign='top'>");
                    
                         echo ("<a class='download' href='$PHP_SELF?kat_id=$topkat[id]&id=$id'>$topkat[name]</a><font> ($topkat[anzahl])</font>");
                    
                         echo ("<br>");
                    
                         echo ("<font>");
                    
                         while($chkat = mysql_fetch_array($result02)) {
                           echo ("<a class='menu' href='$PHP_SELF?kat_id=$chkat[id]&id=$id'>$chkat[name]</a>($chkat[anzahl]), ");
                               }
                    
                          //prüfen ob weitere Unterkat vohanden und setzen von punkten !!!
                          $tst_query = "SELECT count(*) AS test FROM $tb_kat WHERE sid='$pid'";
                          $tst_result = mysql_query($tst_query);
                          $tst = mysql_fetch_array($tst_result);
                    
                          if ($tst[test] > 0) echo (" . . .</font>");
                    
                    
                    
                    
                          //ende spalte 1
                          echo ("\n</td>");
                    
                          }
                    
                      $limit1 = $limit1 + $limit2;
                      //ende zeile 1
                      echo ("\n</tr>");
                    
                      }
                    
                    
                    echo ("\n</table></center>");
                    
                    echo ("\n</td></tr></table>
                           \n</td></tr></table></center>");
                    
                    }
                    
                      //query zur link anzahl
                      $zeilen_query = "SELECT count(*) AS count FROM $tb_links WHERE kat='$kat_id_save'";
                      $zeilen_result = mysql_query($zeilen_query);
                      $zeilen = mysql_fetch_array($zeilen_result);
                      
                    
                    //Kommentar und Links anzeigen (nur wenn links in der Kat)
                    if ($zeilen[count] > 0) {
                    
                    //äusere tabelle start
                    echo ("\n<center><table width='90%' border='0' cellspacing='1' cellpadding='0' bgcolor='#000000'><tr><td>
                           \n<table width='100%' height='100%' border='0' cellspacing='0' cellpadding='0' bgcolor='#003388'>
                           \n<tr><td valign='top'>");
                    
                          $komment_query = "SELECT $tb_kat.kommentar AS kommentar FROM $tb_kat WHERE pid='$id' AND id='$kat_id_save'";
                          $komment_result = mysql_query($komment_query);
                          $komment = mysql_fetch_array($komment_result);
                    
                          $kommentar = nl2br($komment[kommentar]);
                          echo "<font>$kommentar</font>";
                    
                    
                    echo ("\n</td></tr></table>
                           \n</td></tr></table></center>");
                    
                    
                    }
                     
                       }
                    
                    }
                    Kopfkult.de- Der Gamedesign Index
                    EMail: vision.arts@kopfkult.de

                    Kommentar

                    Lädt...
                    X