[PHP] DB result opslaan

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • SuperJERK
  • Registratie: Januari 2002
  • Laatst online: 30-07 12:30
Misschien een beetje vage titel.. ik kon eigelijk niet echt een goeie bedenken....
Ik heb natuurlijk de search gebruikt, maar daar wist ik ook niet echt de juiste termen te gebruiken.

Ik heb een script geschreven dat diverse pagina's genereerd (dus als output allerlei .html bestanden schrijft).

Helaas moet ik voor iedere pagina opnieuw de categorieen inlezen, aangezien het script 200+ pagina's schrijft. Betekend dit 200 keer een database query. Deze code gebruikte ik eerst, maar das natuurlijk niet echt fijn/mooi.

PHP:
1
2
3
4
5
6
7
8
for ($i = 0; $i <= 200; $i ++) {
    $sql = "SELECT * FROM categorie WHERE status=1 ORDER BY naam ASC";
    $result = mysql_query($sql);    

    while ($categorie = mysql_fetch_object($result)) {
    # Schrijf hier de file weg etc.      
    }
}


Nu vraag ik me af of je de "result" van de database query niet op kunt slaan en deze meerdere keren gebruiken. Bijv.

PHP:
1
2
3
4
5
6
7
8
$sql = "SELECT * FROM categorie WHERE status=1 ORDER BY naam ASC";
$result = mysql_query($sql);    

for ($i = 0; $i <= 200; $i ++) {
    while ($categorie = mysql_fetch_object($result)) {
    # Schrijf hier de file weg etc.      
    }
}


Maar dit werkt dus niet, iemand enig idee hoe ik dit aan kan passen zodat het wel werkt? Of weet iemand een andere mooie oplossing.

Zelf dacht ik aan het opslaan van alle gegevens in een (multi)-array, maar in dit geval zijn het categorieen (stuk of 15) en niet echt veel. Maar als ik dit truukje toepas op bijv. onze productlijst (1500) zal dit dan problemen opleveren?

Ik ben dus even het spoorbijster, iemand die mij op de rails kan zetten ;)

Acties:
  • 0 Henk 'm!

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
gewoon de producten in een array plempen en die array uitlezen (wanneer je toch alles wegschrijft naar html bestanden zal dit eens in de zoveel tijd wat extra serverload genereren)

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt de pointer terug zetten op het eerste element met mysql_field_seek() en dan opnieuw door je resultaten loopen.

[ Voor 8% gewijzigd door Verwijderd op 20-02-2004 17:27 ]


Acties:
  • 0 Henk 'm!

  • SuperJERK
  • Registratie: Januari 2002
  • Laatst online: 30-07 12:30
Verwijderd schreef op 20 februari 2004 @ 17:27:
Je kunt de pointer terug zetten op het eerste element met mysql_field_seek() en dan opnieuw door je resultaten loopen.
Misschien een domme vraag.. maar hoe doe je dit :P

Ik zelf dacht aan:

PHP:
1
2
3
4
5
6
7
8
9
10
    $sql = "SELECT * FROM categorie WHERE status=1 ORDER BY naam ASC"; 
    $result = mysql_query($sql);     

for ($i = 0; $i <= 200; $i ++) { 
    echo $i . " ";
    mysql_field_seek($result, 0);
    while ($categorie = mysql_fetch_object($result)) { 
    echo " " .$categorie->naam. "<BR>";     
    } 
}


Maar dat werkt neit echt.. de php manual geeft verder ook niet echt uitleg over het toepassen van mysql_field_seek(). Dus als je nog zou kunnen vertellen hoe ik dit in de code moet toevoegen... graag! :)

Acties:
  • 0 Henk 'm!

  • Buzzin Hornet
  • Registratie: September 2002
  • Niet online
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
 $sql = "SELECT * FROM categorie WHERE status=1 ORDER BY naam ASC"; 
$result = mysql_query($sql);    

$rows = mysql_num_rows($result);

for ($j = 0; $j<= 200; $j++) { 
  for ($i = 0; $i <= $rows; $i ++) { 
    $blaat = mysql_result($result,$i,"blaat);

  }
}
?> 

Doel je nou op zoiets?

[ Voor 11% gewijzigd door Buzzin Hornet op 20-02-2004 17:57 ]

I intend to live forever - so far, so good.


Acties:
  • 0 Henk 'm!

  • SuperJERK
  • Registratie: Januari 2002
  • Laatst online: 30-07 12:30
Zo terug van eten :)
Buzzin Hornet schreef op 20 februari 2004 @ 17:55:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
 $sql = "SELECT * FROM categorie WHERE status=1 ORDER BY naam ASC"; 
$result = mysql_query($sql);    

$rows = mysql_num_rows($result);

for ($j = 0; $j<= 200; $j++) { 
  for ($i = 0; $i <= $rows; $i ++) { 
    $blaat = mysql_result($result,$i,"blaat);

  }
}
?> 

Doel je nou op zoiets?
Uhh... ik snap niet helemaal hoe dat stukje code van jouw werkt.
Maar ik wil dus 200 keer door deze query heenlopen:
$sql = "SELECT * FROM categorie WHERE status=1 ORDER BY naam ASC";

En dat dus zonder dat er 200 keer die query door de database wordt uitgevoerd.

Acties:
  • 0 Henk 'm!

  • Buzzin Hornet
  • Registratie: September 2002
  • Niet online
dat doe je op mijn manier toch?!

Ik roep een keer de query op. En daarna met een dubbele for-loop loop ik 200x door dezelfde resultset heen...

(of zit ik nu fout)

Edit:
ik zie nog wel een foutje omdat ik jou forloop gebruikte:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<? 
$sql = "SELECT * FROM categorie WHERE status=1 ORDER BY naam ASC"; 
$result = mysql_query($sql);     

$rows = mysql_num_rows($result); 

for ($j = 0; $j< 200; $j++) { 
  for ($i = 0; $i < $rows; $i ++) { 
    $value = mysql_result($result,$i,"CEL NAAM"); 
    //hier schrijven naar file
  } 
} 
?> 


En om nog even toe te voegen:
met $blaat = mysql_result($result,$i,"blaat); kan je dus een willekeurige rij uit de resultset halen. Ik heb er even blaat van gemaakt maar daar moet je dus een bestaande cel uit je database in zetten. (snap je.. zo niet, kijk eens hier: http://nl.php.net/manual/nl/function.mysql-result.php )

[ Voor 85% gewijzigd door Buzzin Hornet op 20-02-2004 19:03 ]

I intend to live forever - so far, so good.


Acties:
  • 0 Henk 'm!

Verwijderd

SuperJERK schreef op 20 februari 2004 @ 17:49:
[...]


Misschien een domme vraag.. maar hoe doe je dit :P

Ik zelf dacht aan:

PHP:
1
2
3
4
5
6
7
8
9
10
    $sql = "SELECT * FROM categorie WHERE status=1 ORDER BY naam ASC"; 
    $result = mysql_query($sql);     

for ($i = 0; $i <= 200; $i ++) { 
    echo $i . " ";
    mysql_field_seek($result, 0);
    while ($categorie = mysql_fetch_object($result)) { 
    echo " " .$categorie->naam. "<BR>";     
    } 
}


Maar dat werkt neit echt.. de php manual geeft verder ook niet echt uitleg over het toepassen van mysql_field_seek(). Dus als je nog zou kunnen vertellen hoe ik dit in de code moet toevoegen... graag! :)
Sorry, ik heb wat onzin lopen te verkopen, even rechtzetten :)

Je voert eerst een query uit. Vervolgens ga je uit deze resultset objecten 'trekken'. Aan het begin zal de interne pointer op het eerste element (index 0) staan. Vervolgens ga je met je while loop één voor één de rijen hieruit halen. Aan het einde wil je de pointer weer terug op nul zetten. Dat moet niet met mysql_field_seek maar met mysql_data_seek. Dat wordt dus mysql_data_seek($result, 0);

Acties:
  • 0 Henk 'm!

  • SuperJERK
  • Registratie: Januari 2002
  • Laatst online: 30-07 12:30
Cool, het werk!

Weer wat geleerd vandaag, thanks!

* SuperJERK gaat weer fijn verder met 'computeren' :)
Pagina: 1