Is hergebruik van een MySQL recordset mogelijk?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

HaasOnline XX

HaasOnline XX

22/08/2007 11:54:00
Quote Anchor link
Ik zal mijn vraag proberen uit te leggen aan de hand van een voorbeeld, dit is mijn huidige code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
      // ============================================================================================
      // This function will display a basic link overview ($tablesize=1 to 3 colomns)
      // ============================================================================================
      function DisplayLinkOverview( $table, $tablesize, $catagory, $title, $id ) {

         // Define globals
         $CatagoryArray = array();

         // Send SQL query
         $sqlresult = mysql_query("SELECT * FROM ".$table." ORDER BY ".$catagory." ASC");
         if (!$sqlresult) { die("MySQL query failed.<br>\n"); }
         $recordcount = mysql_num_rows($sqlresult);

         $oldcat = "";
         $counter = 0;

         // Parse trough the records to get the catagories
         while ($record = mysql_fetch_object($sqlresult)) {

            if ( !($oldcat==$record->$catagory) ) {
               $CatagoryArray[$counter] = $record->$catagory;
               $counter++;
               $oldcat = $record->$catagory;
            }
         }
         mysql_free_result($sqlresult); // Empty recordset memory

         $counter = 0;

         // Generate overview of catagories
         foreach ($CatagoryArray as $i => $value) {

            // Send SQL query
            $sqlresult = mysql_query("SELECT * FROM ".$table." ORDER BY ".$title." ASC");
            if (!$sqlresult) { die("MySQL query failed. B<br>\n"); }
            $recordcount = mysql_num_rows($sqlresult);

            $message = "";

            while ($record = mysql_fetch_object($sqlresult)) {
               if ($record->$catagory==$value) {
                  $message .= "<a href=\"".$_SERVER['PHP_SELF']."?id=".$record->$id."\">".$record->$title."</a><br>\n";
               }
            }

            $guiengine->DisplayLinkBox( $tablewidth, $value, $message);
            echo "<br>\n";
            $counter++;

            mysql_free_result($sqlresult); // Empty recordset memory
         }

      }


Zoals je in de code kan zien volg ik de volgende stappen op:

1a. Zend SQL command, order by catagorie
1b. Plaats alle catagorieen in een array (zonder dubbele)
2a. Doorloop de array en zoek alle items op
2b. Zend een SQL command voor een recordset te verkrijgen
2c. Doorloop de recordset
2d. Valideer de record en voeg deze aan een string toe
2e. Weergeef de gevonden en gesorteerde records
3. Einde

Deze methode werkt goed, de server kan de aanvragen perfect verwerken en weergeven. Ik vroeg me alleen af, ik zend bij punt 3a steeds (per catagorie) een SQL query, dit is op zich best langzaam en inefficient. Dit moet toch anders kunnen, de recordset kan ik steeds herbruiken, maar de pointer krijg ik niet aan het begin van de recordset. Dit moet toch kunnen?

Op internet kan ik geen voorbeelden vinden hoe ik dit kan of moet doen, dus heeft iemand hierzo een suggestie voor me?


Ps. Code werkt in PHP4 en PHP5 (maar niet bij jouw denk ik ivm globals)
Ps. Ik snap dat ik WHERE kan gebruiken bij punt 2b, maar dit is niet belangrijk.
Ps. Ik verwacht geen verbeter code, ik wil alleen een methode weten hoe ik dit kan verbeteren. (dit is geen code request dus, maar een method request)
 
PHP hulp

PHP hulp

25/12/2024 05:49:24
 
Jelmer -

Jelmer -

22/08/2007 12:36:00
Quote Anchor link
Bedoel je mysql_data_seek?
 
HaasOnline XX

HaasOnline XX

22/08/2007 13:32:00
Quote Anchor link
Bedankt, dat is precies wat ik zocht en niet kon vinden!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.