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 =
|
------------------------------------------------------------ ------