Ergebnis einer mysql-Abfrage zweimal verwenden?
Ergebnis einer mysql-Abfrage zweimal verwenden?
am 11.10.2006 20:44:13 von heiner eiberger
Hallo!
Ich finde in keiner Dokumentation eine Antwort auf mein Problem.
Vielleicht weiß hier jemand Rat:
In einer php-Datei verwende ich folgende Abfrage einer Datenbank:
....
$erg = mysql_query($sql,$link);
$daten_anz = mysql_num_rows($erg);
for ...
{
$temp_zeile = mysql_fetch_assoc($erg);
echo "
".$temp_zeile[2];
}
....
while($zeile = mysql_fetch_row($erg))
.....
Der Aufruf der php-Datei führt zu einer hängenden html-Datei.
Mein Frage: Kann es sein, dass man nicht zweimal auf $erg zugreifen darf?
Und wenn ja, was ist genau der Hintergrund?
Bitte um Hilfe
heiner
Re: Ergebnis einer mysql-Abfrage zweimal verwenden?
am 11.10.2006 22:21:09 von Carsten Wiedmann
heiner eiberger schrieb:
> $erg = mysql_query($sql,$link);
> $daten_anz = mysql_num_rows($erg);
> for ...
> {
> $temp_zeile = mysql_fetch_assoc($erg);
> echo "
".$temp_zeile[2];
> }
> ...
> while($zeile = mysql_fetch_row($erg))
> ....
>
> Der Aufruf der php-Datei führt zu einer hängenden html-Datei.
Sorry, versteh ich nicht.
> Mein Frage: Kann es sein, dass man nicht zweimal auf $erg zugreifen darf?
Kann nicht sein. Wenn du die Ergebnisliste ($erg) schonmal komplett
durchgelaufen bist, musst du den Zeiger (der auf das aktuelle Ergebnis
zeigt) nur wieder auf 0 stellen, bevor du ein 2. Mal durch die Ergebnisse
läufst.
Gruß
Carsten
Re: Ergebnis einer mysql-Abfrage zweimal verwenden?
am 11.10.2006 23:31:13 von Niels Braczek
heiner eiberger schrieb:
> Der Aufruf der php-Datei führt zu einer hängenden html-Datei.
Nein. Es gibt vielleicht hängende Gärten, aber keine hängenden
HTML-Dateien.
> Mein Frage: Kann es sein, dass man nicht zweimal auf $erg zugreifen dar=
f?
Doch, das kann man. Macht aber so wie du es vorhast, keinen Sinn, weil
der Traffik zwischen Web- und DB-Server unnötig verdoppelt wird.
> Und wenn ja, was ist genau der Hintergrund?
Du hast alle Datensätze gelesen, mehr sind da halt nicht. Dass man --
wie Carsten anmerkt -- zurückspulen kann, tut dabei nichts zur Sache.
Du willst die Datensätze in einem Array speichern.
$result =3D mysql_query( $sql, $link ) or die($sql.'
'.mysql_error());=
$rows =3D array();
while ( $row =3D $mysql_fetch_assoc( $result ) ) {
$rows[] =3D $row;
// evtl. weitere Aktivitäten
}
Jetzt sind die Datensätze in $rows und du kannt sie sooft durchlaufen,
wie du Lust hast.
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Ergebnis einer mysql-Abfrage zweimal verwenden?
am 12.10.2006 10:20:07 von Tobias Kutzler
Niels Braczek schrieb:
> heiner eiberger schrieb:
>
>> Der Aufruf der php-Datei führt zu einer hängenden html-Datei.
>
> Nein. Es gibt vielleicht hängende Gärten, aber keine hängenden
> HTML-Dateien.
>
>> Mein Frage: Kann es sein, dass man nicht zweimal auf $erg zugreifen darf?
>
> Doch, das kann man. Macht aber so wie du es vorhast, keinen Sinn, weil
> der Traffik zwischen Web- und DB-Server unnötig verdoppelt wird.
Ist das wirklich so? Ich dachte, dass Ergebnis wird bei
$result = mysql_query( $sql, $link ) or die($sql.'
'.mysql_error());
in $result gespeichert. Wenn ich nun $result mehrmals benutze, werden
dann wirklich jedesmal die Daten neu aus der Datenbank ausgelesen? Würde
mich mal interessieren.
Ciao,
Tobias
Re: Ergebnis einer mysql-Abfrage zweimal verwenden?
am 12.10.2006 10:25:23 von Joerg Behrens
Tobias Kutzler schrieb:
> Niels Braczek schrieb:
>> heiner eiberger schrieb:
>>
>>> Der Aufruf der php-Datei führt zu einer hängenden html-Datei.
>>
>> Nein. Es gibt vielleicht hängende Gärten, aber keine hängenden
>> HTML-Dateien.
>>
>>> Mein Frage: Kann es sein, dass man nicht zweimal auf $erg zugreifen
>>> darf?
>>
>> Doch, das kann man. Macht aber so wie du es vorhast, keinen Sinn, weil
>> der Traffik zwischen Web- und DB-Server unnötig verdoppelt wird.
>
> Ist das wirklich so? Ich dachte, dass Ergebnis wird bei
>
> $result = mysql_query( $sql, $link ) or die($sql.'
'.mysql_error());
>
> in $result gespeichert. Wenn ich nun $result mehrmals benutze, werden
> dann wirklich jedesmal die Daten neu aus der Datenbank ausgelesen? Würde
> mich mal interessieren.
Mach mal ein vardump() auf dein $result. Das was du da hast ist ein
Verweis auf das Resultset welches der MySQL Server fuer dich bereit haelt.
Gruss
Joerg
--
TakeNet GmbH http://www.takenet.de
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
Re: Ergebnis einer mysql-Abfrage zweimal verwenden?
am 12.10.2006 10:32:18 von Claus Reibenstein
Niels Braczek schrieb:
> Du willst die Datensätze in einem Array speichern.
Was bei großen Resultsets nicht unbedingt sinnvoll ist. Du erkaufst Dir
damit einen _eventuellen_ Performance-Gewinn durch erhöhten
Speicherverbrauch. Spätestens wenn die Maschine anfangen muss zu
swappen, ist Dein Performance-Gewinn dahin.
Gruß. Claus
Re: Ergebnis einer mysql-Abfrage zweimal verwenden?
am 12.10.2006 15:04:33 von Niels Braczek
Claus Reibenstein schrieb:
> Niels Braczek schrieb:
>=20
>> Du willst die Datensätze in einem Array speichern.
>=20
> Was bei großen Resultsets nicht unbedingt sinnvoll ist. Du erkaufst D=
ir
> damit einen _eventuellen_ Performance-Gewinn durch erhöhten
> Speicherverbrauch. Spätestens wenn die Maschine anfangen muss zu
> swappen, ist Dein Performance-Gewinn dahin.
Wenn die Datenmenge so groß ist, dass es Speicherprobleme gibt, ist man=
meist bereits nahe am Zeitlimit. Da besteht die Gefahr, dass die Daten
gar nicht ein zweites Mal übertragen werden können.
Daher sollte die Verarbeitung wann immer möglich innerhalb *einer*
Schleife erfolgen. Dann stellt sich das Problem erst gar nicht.
MfG
Niels
--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------