[PHP][MYSQL] Recursieve query

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • jopiek
  • Registratie: September 2000
  • Laatst online: 08-09 07:26

jopiek

Tja... 'ns ff denken.

Topicstarter
Ik wil een dynamische sitemap genereren vanuit een MySQL databeestje...

Nu lijkt me het verreweg het makkelijks om dit met een recusieve loop te doen, op zich geen probleem, heb ik vaak zat in Delphi/C++/Java gedaan en ook PHP kan dat getuige o.a.:
http://groups.google.com/....camel%40LOCALHOST&rnum=9

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function getContentTest($curid, $prev_content)
{
  $query_SitemapFunction = "SELECT * FROM sitemap where prev_item = " . $curid; 
 $SitemapFunction = mysql_query($query_SitemapFunction, $CostsOfWarConn) or die(mysql_error());
  $row_SitemapFunction = mysql_fetch_assoc($SitemapFunction);
  $totalRows_SitemapFunction = mysql_num_rows($SitemapFunction);

  do {
    $html_content = $prev_content . " " . $row_SitemapFunction['SitemapText'] . getContentTest($row_SitemapFunction['uid'], $prev_content);
  } while ($row_SitemapFunction = mysql_fetch_assoc($SitemapFunction));

  return $html_content;
}


dit moet imho keurig werken, maar niets is minder waar, er komt geen resultaat! Nu dacht ik dat misschien de query steeds overschreven wordt en dat dat het probleem is, maar weet niet zeker....

output html houdt op bij het uitvoeren van de functie dus daar loopt het mis...

[ Voor 4% gewijzigd door jopiek op 06-01-2003 20:03 . Reden: url gefixt ]

Cogito Ergo Credo


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Waarom fetch je na de lus? Je probleem ligt bij het feit dat je recursie niet stopt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • jopiek
  • Registratie: September 2000
  • Laatst online: 08-09 07:26

jopiek

Tja... 'ns ff denken.

Topicstarter
ik fetch na de lus omdat dreamweaver me dat zo voorhoudt, maar zal eens ff proberen in het do () stukje te fetchen...

Cogito Ergo Credo


Acties:
  • 0 Henk 'm!

  • jopiek
  • Registratie: September 2000
  • Laatst online: 08-09 07:26

jopiek

Tja... 'ns ff denken.

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function getContentTest($curid, $prev_content)
{
  $query_SitemapFunction = "SELECT * FROM sitemap where prev_item = " . $curid; //where levels = n
  $SitemapFunction = mysql_query($query_SitemapFunction, $CostsOfWarConn) or die(mysql_error());
  //$row_SitemapFunction = mysql_fetch_assoc($SitemapFunction);
  $totalRows_SitemapFunction = mysql_num_rows($SitemapFunction);

  //$html_content = "";
  while ($row_SitemapFunction = mysql_fetch_assoc($SitemapFunction)) {
    $html_content = $prev_content . " " . $row_SitemapFunction['SitemapText'] . getContentTest($row_SitemapFunction['uid'], $prev_content);
  } 

  return $html_content;
}


dit levert helaas zelfde resultaat op!

Vermoedelijk toch dat die query niet gekopieerd wordt bij het aanroepen van de functie o.i.d. denk ik...

Denk overigens dat de volgende code meer de bedoeling is, maar nog steeds zonder suc6:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function getContentTest($curid)
{
  $query_SitemapFunction = "SELECT * FROM sitemap where prev_item = " . $curid; //where levels = n
  $SitemapFunction = mysql_query($query_SitemapFunction, $CostsOfWarConn) or die(mysql_error());
  //$row_SitemapFunction = mysql_fetch_assoc($SitemapFunction);
  $totalRows_SitemapFunction = mysql_num_rows($SitemapFunction);

  //$html_content = "";
  while ($row_SitemapFunction = mysql_fetch_assoc($SitemapFunction)) {
    if (totalRows_SitemapFunction >= 0) {
      $html_content = " " . $row_SitemapFunction['SitemapText'] . getContentTest($row_SitemapFunction['uid']) . $html_content;
    }
  } 

  return $html_content;
}

[ Voor 47% gewijzigd door jopiek op 06-01-2003 20:13 ]

Cogito Ergo Credo


Acties:
  • 0 Henk 'm!

  • _-= Erikje =-_
  • Registratie: Maart 2000
  • Laatst online: 15-09 14:23
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function getContentTest($curid) 
{ 
  $query_SitemapFunction = "    SELECT * 
                FROM sitemap 
                WHERE prev_item = " . $curid; 

  $SitemapFunction = mysql_query($query_SitemapFunction, $CostsOfWarConn) or die(mysql_error()); 

    if(mysql_num_rows($SitemapFunction))
        {
            while ($row_SitemapFunction = mysql_fetch_assoc($SitemapFunction)) 
            { 
                    $html_content = " " . $row_SitemapFunction['SitemapText'] . getContentTest($row_SitemapFunction['uid']) . $html_content; 
  
            }  
        }
  return $html_content; 
}
`

wat ik eerst zei over overschrijven is natuurlijk onzin, je plakt de oude content erachter.

Houdt er wel rekening mee dat recursieve queries wel eens kunne leiden tot ernstig datbase zware applicaties, ik heb pas geleden een overzichtje dat het aantal paden in een boom telde van +- 2000 queries teruggebracht naar 3 queries. Daardoor werd het allemaal een klein beetje sneller.

[ Voor 107% gewijzigd door _-= Erikje =-_ op 06-01-2003 21:17 ]


Acties:
  • 0 Henk 'm!

  • jopiek
  • Registratie: September 2000
  • Laatst online: 08-09 07:26

jopiek

Tja... 'ns ff denken.

Topicstarter
heb je eerste deel niet gezien ;)
maar helaas geeft ook niks terug, heb m'n db nog een keer gechecked, er staat data in en zo, php etc. werkt gewoon...

hmmm hij gaat hier klaarblijkelijk al de mist in:

de vorige post waren toch niet het hoofdprobleem, lijkt er op dat ie om de een of andere vage reden gewoon geen zin heeft :(

rebootting ;)

[ Voor 97% gewijzigd door jopiek op 06-01-2003 21:40 ]

Cogito Ergo Credo

Pagina: 1