Avatar billede alaflam Nybegynder
09. august 2004 - 12:14 Der er 8 kommentarer og
1 løsning

unlimited categoy

Goddag,

Jeg har prøvet på at lave en kode, så man kan lave unlimited category, men det kan jeg ikke rigtige finde ud af, jeg har lavet min kode sådan der, det kan være nogen der har en ide om hvordan man gøre det, så må i meget gerne post tilbage, på forhånd takker jeg for din hjælp :)

$sql = mysql_query("select * from forum");
while ($get = mysql_fetch_array($sql)) {
    echo ">: ".$get["name"];
    $num = mysql_query("select * from forum where parent_id=".$get["fid"]."") or die(mysql_error());
    $number = mysql_num_rows($num);
    if ($number>=1)
    { 
        $query = mysql_fetch_array($num);
        for($i=0;$i<$number;$i++)
        {
            echo ">>: ".$query["name"]."<br>";
        }
    }
}

Hvordan kan jeg få den altid til at gentag forløkken så lægge der er en undercategory ?
Avatar billede coderdk Praktikant
09. august 2004 - 13:31 #1
Du skal lave en rekursiv funktion :)
Avatar billede alaflam Nybegynder
10. august 2004 - 21:50 #2
Det betyder ?
Avatar billede coderdk Praktikant
10. august 2004 - 21:59 #3
En funktion der kalder sig selv, kaldes en rekursiv funktion :)
Her er en simpel en til at udskrive alle filer i alle underbiblioteker:

function showDir( $dir )
{
  $dh = opendir( $dir );
  while ( $file = readdir( $dh ) )
  {
      if ( is_directory( $file ) && $file != '.' && $file != '..' )
      {
          showDir( $dir . "/" . $file );
      }
      if ( !is_directory( $file ) )
      {
          echo $dir . "/" . $file . "<br>";
      }
  }
}

showdir( '/tmp' );
Avatar billede alaflam Nybegynder
11. august 2004 - 18:11 #4
Det hjalp ikke meget, har brugt allerede 4 timer på at kode det... :(
Avatar billede coderdk Praktikant
11. august 2004 - 18:18 #5
Prøv noget a la:

<?php

    function getCatWithParent( $id )
    {
        if ( $id == 0 )
        {
            $id = "0 OR parent_id IS NULL";
        }
        $sql = "
            SELECT
                *
            FROM
                forum
            WHERE
                parent_id = $id
            ";
        $qh = mysql_query( $sql )
        while ( $row = mysql_fetch_assoc( $qh ) )
        {
            echo $row['name'] . " : ";
            getCatWithParent( $row['fid'] );
        }
        mysql_free_result( $qh );
        echo "<br>";
    }

    getCatWithParent( 0 );

?>

Virker måske ikke helt efter hensigten, men du kan måske få en idé. Bemærk at jeg ikke ved hvad ID'en i din tabel hedder (har kaldt den fid).
Avatar billede alaflam Nybegynder
11. august 2004 - 18:24 #6
Hej igen, Jeg har bygget min database på den måde:

+----+-----------+----------
| ID | parent_id | name
+----+-----------+----------
| 1  |      0    | head1
| 2  |      1    | sub1
| 3  |      2    | sub2
| 4  |      2    | sub2
| 5  |      3    | sub3
| 6  |      0    | head2
| 7  |      7    | sub1
| 8  |      7    | sub1
| 9  |      8    | sub2
+----+-----------+----------

Jeg ved ikke om det giver dig en ide hvordan jeg skal skrive koden, jeg har faktisk skrevet 3 forskellige kode, jeg kan kun få printet dem ud på den her måde:

head1
- sub1
-- sub2
--- sub3

header2
- sub1
-- sub2

Havde svært ved at gå tilbage i koden, og tjekke om der stadigvæk findes andre "sub-categori" :(
Avatar billede alaflam Nybegynder
11. august 2004 - 22:50 #7
<?php
$start = 1;
$getSubsStart = 1;
function getSubs($last_ID)
{
   
}
function getParent($last_ID)
{
    global $start;
    $sql = "
            SELECT
                *
            FROM
                forum_old
            WHERE
                parent_id = '".$last_ID."' AND idsort = '".$start."'";

    $db = mysql_query($sql) or die(mysql_error());
    while ($query = mysql_fetch_array($db))
    {
        echo $query["name"]." (".$query["ID"].")<br>";
    }
}

$sql = mysql_query("select * from forum_old") or die(mysql_error());
while ($query = mysql_fetch_array($sql))
{
    if ($query["parent_id"] <= 0)
    {
        echo $query["name"]." (".$query["ID"].")<br>";
    }
    else
    {
        getParent($last_ID);
    }
    $last_ID = $query["ID"];
   
}


?>
Avatar billede alaflam Nybegynder
12. august 2004 - 00:05 #8
Ok, her er en anden eks. jeg har arbejde med nu i 1 time, den virker lidt på en bedre måde:

<?php
$start = 1;

function countParent()
{
    for ($i=1;$i<count($GLOBALS['$last_categori'])+1;$i++)
    {
        global $start;
        //$sql = mysql_query("select * from forum_old where ID       
        $ID = $GLOBALS['$last_categori'][count($GLOBALS['$last_categori'])-$i];
        echo "select * from forum_old where parent_id='".$ID."' AND idsort='".$start."'";
        $sql = mysql_query("select * from forum_old where parent_id='".$ID."' AND idsort='".$start."'") or die(mysql_error());
        if (mysql_num_rows($sql) >= 1)
        {
            echo "<b>found</b><br>";
            $query = mysql_fetch_array($sql);
            getParent($query["ID"]);
        }
        else
        {
            echo "<b>NOT Found</b><br>";
        }
    }
}

function getParent($last_ID) //, $checkID='0'
{
    global $start, $last_categori;
   
    /*if ($checkID == 0) { $extra = "parent_id = '".$last_ID."'"; }
    else  { $extra = "ID = '".$last_ID."'"; }*/
   
    $extra = "parent_id = '".$last_ID."'";
   
    $sql = "SELECT * FROM forum_old WHERE ".$extra." AND idsort = '".$start."'";   
    echo "<br><i>$sql</i><br>";
    $db = mysql_query($sql) or die(mysql_error());
    if (mysql_num_rows($db) >= 1) {
        $query = mysql_fetch_array($db);
        echo " - ".$query["name"]." (<b>ID:</b> ".$query["ID"].") (<b>ParentID:</b> ".$query["parent_id"].") (<b>IDSORT:</b> ".$start.")";

        // Gemme den nuværende PARENT:ID
        $GLOBALS['$last_categori'][] = $query["parent_id"];
    }
    else
    {
        $start++;
        echo countParent();
    }
}

$sql = mysql_query("select * from forum_old") or die(mysql_error());
while ($query = mysql_fetch_array($sql))
{
    if ($query["parent_id"] <= 0)
    {
        $start = 1;
        echo $query["name"]." (<b>ID:</b> ".$query["ID"].") (<b>ParentID:</b> ".$query["parent_id"].") (<b>IDSORT:</b> ".$start.")<br>";
    }
    else
    {
        // Underkategori overføre til funktion.
        getParent($last_ID);
    }
    $last_ID = $query["ID"];
   
}


?>

Det er hvad den viser på skærmen:
Head (ID: 1) (ParentID: 0) (IDSORT: 1)

SELECT * FROM forum_old WHERE parent_id = '1' AND idsort = '1'
- Sub1 (ID: 2) (ParentID: 1) (IDSORT: 1)
SELECT * FROM forum_old WHERE parent_id = '2' AND idsort = '1'
- Sub2-1 (ID: 3) (ParentID: 2) (IDSORT: 1)
SELECT * FROM forum_old WHERE parent_id = '3' AND idsort = '1'
- Sub3 (ID: 8) (ParentID: 3) (IDSORT: 1)
SELECT * FROM forum_old WHERE parent_id = '7' AND idsort = '1'
select * from forum_old where parent_id='3' AND idsort='2'NOT Found
select * from forum_old where parent_id='2' AND idsort='2'found

SELECT * FROM forum_old WHERE parent_id = '7' AND idsort = '2'
select * from forum_old where parent_id='3' AND idsort='3'NOT Found
select * from forum_old where parent_id='2' AND idsort='3'NOT Found
select * from forum_old where parent_id='1' AND idsort='3'NOT Found
select * from forum_old where parent_id='1' AND idsort='3'NOT Found
Head (ID: 9) (ParentID: 0) (IDSORT: 1)

SELECT * FROM forum_old WHERE parent_id = '9' AND idsort = '1'
- Come ON (ID: 10) (ParentID: 9) (IDSORT: 1)
SELECT * FROM forum_old WHERE parent_id = '10' AND idsort = '1'
- ffff (ID: 11) (ParentID: 10) (IDSORT: 1)
SELECT * FROM forum_old WHERE parent_id = '11' AND idsort = '1'
select * from forum_old where parent_id='10' AND idsort='2'NOT Found
select * from forum_old where parent_id='9' AND idsort='2'NOT Found
select * from forum_old where parent_id='3' AND idsort='2'NOT Found
select * from forum_old where parent_id='2' AND idsort='2'found

SELECT * FROM forum_old WHERE parent_id = '7' AND idsort = '2'
select * from forum_old where parent_id='10' AND idsort='3'NOT Found
select * from forum_old where parent_id='9' AND idsort='3'NOT Found
select * from forum_old where parent_id='3' AND idsort='3'NOT Found
select * from forum_old where parent_id='2' AND idsort='3'NOT Found
select * from forum_old where parent_id='1' AND idsort='3'NOT Found
select * from forum_old where parent_id='1' AND idsort='3'NOT Found

----------------------------------------

Forvirrende ikke sandt :)
Avatar billede alaflam Nybegynder
23. august 2004 - 21:15 #9
.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester