[PHP] een mysql_fetch_array nog een keer gebruiken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Theguide
  • Registratie: December 2000
  • Laatst online: 26-06 11:48
Hoe kan ik nog een keer door een mysql_fetch_array heen lopen?
Ik heb in een script de volgende code staan om door een "recordset" heen te lopen.
PHP:
1
2
3
4
5
$sql = "SELECT ....";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
  do stuff;
}

Verderop in het script wil ik van exact hetzelfde resultaat gebruik maken. Maar als ik gewoon het volgende doe:
PHP:
1
2
3
while ($row = mysql_fetch_array($result)) {
  do some other stuff, but with same data;
}

Dan looptie niet door de mysql_fetch_array heen. Ik denk omdat de pointer al aan het einde van de array staat. Wat ik eigenlijk dus zoek is een php equivalent voor de rs.MoveFirst methode van ASP.

Fuck me if I'm wrong, but isn't your name Gretchen?


Acties:
  • 0 Henk 'm!

Verwijderd

mysql_data_seek()

Acties:
  • 0 Henk 'm!

  • Theguide
  • Registratie: December 2000
  • Laatst online: 26-06 11:48
Thanx!
PHP:
1
2
3
4
mysql_data_seek($result, 0); // toevoeging
while ($row = mysql_fetch_array($result)) {
  do some other stuff, but with same data;
}

is het geworden. Works like a charm! :Y)

Fuck me if I'm wrong, but isn't your name Gretchen?


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je kan ook de benodigde waarden in een array plaatsen en die meerdere keren gebruiken.
't Is maar net wat je handiger vindt :)

Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
Ik denk dat dat wellicht wat sneller is, omdat je dan niet meer hoeft te communiceren met de mysql server om je resultaat opnieuw te fetchen. In dit geval kan je direct uit het geheugen je resultaat opnieuw lezen.

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

en de resultset staat niet in het geheugen, zou je denken? ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Theguide
  • Registratie: December 2000
  • Laatst online: 26-06 11:48
JonkieXL schreef op 10 november 2002 @ 15:38:
Ik denk dat dat wellicht wat sneller is, omdat je dan niet meer hoeft te communiceren met de mysql server om je resultaat opnieuw te fetchen. In dit geval kan je direct uit het geheugen je resultaat opnieuw lezen.
Ik wil juist de "recordset" opnieuw gebruiken, _omdat_ ik juist niet opnieuw met de mysql server wil communiceren. Als het waar zou zijn wat je zegt, dan zou ik aardig aan m'n doel voorbij schieten :)
De $result zit in het geheugen en daar maak ik opnieuw gebruik van, zodat ik niet opnieuw een query op de mysql server hoef los te laten om de (zelfde) $result te krijgen.

Fuck me if I'm wrong, but isn't your name Gretchen?


Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
drm schreef op 10 november 2002 @ 15:39:
en de resultset staat niet in het geheugen, zou je denken? ;)
Smart ass :P
Maar je moet hier eerst weer een socket call maken met mysql server dat lijkt me zoiezo trager dan direct waarden uit een array halen ;)

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

De communicatie met de mysql-server heeft al plaatsgevonden op het moment dat je mysql_query () doet, daarna niet meer. De rest is PHP 's pakkie-an.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
Als dat zo is moet ik je gelijk geven. Indien mysql_data_seek() ook een beetje snelle functie is dan lijkt me het geen probleem om het op deze manier te doen.

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Ik zou 'm zelf niet gebruiken, puur omdat ik 't niet netjes vindt ogen. 't Lijkt net of je 2x je data op moet halen, terwijl 't tussentijds niet gemuteerd wordt ofzo...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

drm schreef op 10 november 2002 @ 15:39:
en de resultset staat niet in het geheugen, zou je denken? ;)

Bij mysql wordt idd de hele resultset in het geheugen geladen.
Niet elke database doet dat, sommige DB's zijn ontworpen om met gigabytes om te gaan, ipv kilobytes en dan is dat niet de beste strategie :)

In dat geval zal je wel wat kunnen winnen als je het even in een eigen buffertje stopt, vanwege dit gedrag.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

mja, maar we hadden het niet over andere dbmsen :P

edit:
Overigens, het is toch meer de implementatie van een interface naar de database? Ik bedoel, mysql_Fetch_array is een onderdeel van de interface naar MySQL, en deze functie pakt een record uit de resultset, en schuift een interne pointer 1 plekkie op. Wat heeft dat verder nog met MySQL te maken :? En hoe gaat het dan bij andere db's? :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Sommige andere db's die doen de executie van een statement eigenlijk pas als je de data gaat fetchen.
En dan bijv een hele batch die dan tot een bepaalde grootte in 1x voorbereid wordt en als je dan over die grootte gaat weer opnieuw etc etc.

Beetje fout uitgelegd, ik ken de internals van bijv Oracle niet zo goed, maar volgens mij gaat het wel es zo.
Bij Interbase zie je dat ook gebeuren, simpelweg als je kijkt naar de tijd die de verschillende commando's duren naar verhouding tot die van mysql en/of postgresql.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Op die fiets. Maar ik kan me wel voorstellen dat die implementaties de boel wel bufferen, zolang je de query nog niet opnieuw gedaan hebt. (beetje uit de lucht gegrepen ;))

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Uiteraard wordt er zoveel mogelijk gebuffered. Maar daar moet je niet _te_ veel van uit gaan natuurlijk :)

Acties:
  • 0 Henk 'm!

Verwijderd

ACM schreef op 10 november 2002 @ 16:20:
Sommige andere db's die doen de executie van een statement eigenlijk pas als je de data gaat fetchen.
Dus hiermee wil je zeggen dat wanneer je voor example mysql_num_rows gebruikt om te kijken hoeveel items er zijn gevonden dat ie dan pas gaat zoeken?... handig :P

Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
Volgens mij bedoeld ACM dat pas indien je mysql_fetch_array doet de query daadwerkelijk wordt uitgevoerd?

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Nee, wat ACM (volgens mij) bedoelt, is dat de data pas werkelijk uit de database gelezen wordt wanneer je bijv. mysql_fetch_row (); doet. Bij MySQL is dat dus niet het geval, maar bij andere db's wel.

ACM: Neuh, maar dan komt 't in feite wel op 'tzelfde neer :)

edit:
JonkieXL: dat zeg ik :+

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

ok... dus ook bij mysql_num_rows :) bv.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 10 november 2002 @ 16:29:
Dus hiermee wil je zeggen dat wanneer je voor example mysql_num_rows gebruikt om te kijken hoeveel items er zijn gevonden dat ie dan pas gaat zoeken?... handig :P

Oracle kent helemaal geen num_rows (bij mijn weten) :+
(En ja, dat is soms heel vervelend)

Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
En dat noemen ze een echt DBMS? >:)

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

JonkieXL schreef op 10 november 2002 @ 16:50:
En dat noemen ze een echt DBMS? >:)

Ja, waar heb je het voor nodig dan? :P

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

In die situaties waar het vervelend is dat Oracle het niet heeft, heb je het nodig, denk ik :D :D

Maar in principe moet je idd gewoon zonder kunnen. Ik heb 'm nooit nodig gehad.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1