Is hergebruik van een MySQL recordset mogelijk?
Code (php)
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
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
}
}
// 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)
Bedankt, dat is precies wat ik zocht en niet kon vinden!