Tom: Postition im Resultset?

Beitrag lesen

Hello,

Aber fragen wir ihn doch einfach danach. Simon, was meintest Du? Die Position des Datensatzes in der Ergebnismenge (Resultset) oder eine Position in der Ausgangsmenge (Tabelle)?

ich meine genau ersteres, sollte sich also mit mysql_row_tell() auslesen lassen, oder? nur scheint das über php nicht realisierbar zu sein;-).

ich kann zwar mit mysql_data_seek () weitersurfen im resultset, aber bekomme aber nicht den tatsächlichen wert der aktuellen reihe des resultsets zu sehen...

wie geht das also?

Du hast zwei Möglichkeiten bei MySQL, Resultsets zu verarbeiten. Du kannst sie "Raw" auf die Schnittstelle klatschen, dann verhalten sie siche wie eine gute alte Textdatei, die nur vorwärts lesbar ist. Das erreichst Du über PHP, indem Du ein unbuffered Query anforderst.

http://de3.php.net/manual/de/function.mysql-unbuffered-query.php

Das resultset eines unbuffered Query musst Du auf jeden fall vollständig abholen und danach auch wieder freigeben mit [PHP]mysql_free_result()

Die zweite Möglichkeit ist das "normale" [PHP]mysql_query().
Hier werden Dir die Daten von MySQL in einem Ausgangsspeicherbereich aufbereitet angeboten. Du hast Zusatzinformationen, wie [PHP]mysql_num_rows() usw. zur Verfügung, kannst in dem Resultset navigieren, jede Zeile und sogar jedes Feld einzeln ansprechen. Und Du musst es nicht vollständig abholen. Wenn Du es nicht mehr brauchst, musst Du es trotzdem mit [PHP]mysql_free_result() wieder freigeben.

Navigieren über die Datensätze kannst Du mittels [PHP]mysql_data_seek()
http://de3.php.net/manual/de/function.mysql-data-seek.php

Das stellt den Zeiger im resultset auf die gewünschte Zeile der Ausgabemenge.
Mittels [PHP]mysql_fetch_row() oder ~_assoc() usw. kannst Du nun die Zeile "abholen" und in eine PHP-Array übertragen. http://de3.php.net/manual/de/function.mysql-fetch-assoc.php
Danach steht der zeige im Resultset hinter dieser Zeile, also auf dem Anfang der nächsten.

Du benötigst also gar nicht unbedingt eine Funktion, die Dir angibt, wo der Zeiger steht, denn Deine Applikation weiß ja, wo sie ihn hingestellt hat. Da sich das Resultset nicht ändern kann, solange es lebt, ist das immer reproduzierbar. Du kannst den Zeiger also vor dem Lesezugriff (andere sind ja nicht erlaubt) immer so positionieren, wie Du magst.

Erlaubte Werte liegen im Bereich von 0 bis (Satzanzahl - 1). Aber das steht ja auch im PHP-Manual.

Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)