Rafael: MySQL-Zeiger: Position ermitteln

Wie lässt sich den die Position des Zeigers einer MySQL-Ressource ermitteln? Ich möchte in einer Funktion den Zeiger zurücksetzen, die Ressource einmal durchlaufen und dann die Ressource wieder an den ursprünglichen Ort zurücksetzen.

Den Zeiger an den Anfang zu setzen funktioniert ja mittels mysql_data_seek($result,0) aber wenn der zeiger eben zur Zeit des Funktionsaufrufes an Stelle 3 stand möchte ich ihn eben wieder auch dorthin setzen.

Wie kann ich die Zeigerposition also wieder zurücksetzen?
Danke für Hilfe!

  1. Ahoi Rafael,

    Wie kann ich die Zeigerposition also wieder zurücksetzen?

    Wie du sagtest mit mysql_data_seek(); deine frage lautet also eher
    "wie bekomme ich die Zeigerposition?" dazu gibt es auf den ersten
    Blick scheinbar keine eigene PHP funktion. wie bzw. wo holst du die
    werte denn?
    for($i=0...
    wenn $i==0 => zeiger auf 0
    wenn $i==1 => zeiger auf 1
    ...

    MfG

    1. Ich kann dir leider nicht ganz folgen. Eine Funktion bekommt eine Ressource übergeben, deren Zeiger eventuell schon bewegt wurde. Nun möchte ich diese Ressource einmal durcharbeiten, wozu ich den Zeiger zurücksetzen und einmal durchlaufe.

      Anschließend möchte ich den Zeiger wieder an die ursprüngliche Position zurückschieben, die ich nicht kenne. An den Anfang wäre ja einfach. Was hilft mir da eine For-Schleife?

      1. Ahoi Rafael,

        Ich kann dir leider nicht ganz folgen.

        und ich dir nicht helfen wenn du dein Problem nicht genauer beschreibst und vll sogar etwas Code lieferst.

        Eine Funktion bekommt eine Ressource übergeben, deren Zeiger eventuell schon bewegt wurde.

        Das ist doch schonmal ein anfang. Dann sorge dafür das du weisst ob er bewegt wurde oder nicht und wie weit.

        Nun möchte ich diese Ressource einmal durcharbeiten, wozu ich den Zeiger zurücksetzen und einmal durchlaufe.

        Also einmal komplett, von vorne bis hinten?

        Anschließend möchte ich den Zeiger wieder an die ursprüngliche Position zurückschieben, die ich nicht kenne.

        s.o. sorg dafür das du sie kennst.

        An den Anfang wäre ja einfach. Was hilft mir da eine For-Schleife?

        das war ein ansatz wie du herausbekommen kannst an welcher position
        der Zeiger ist. Und frei aus der luft gegriffen da ich deinen Code
        nicht kenne.

        MfG

        1. Das ist doch schonmal ein anfang. Dann sorge dafür das du weisst ob er bewegt wurde oder nicht und wie weit.

          Dann gäbe es keine Problemstellung. Es müsste doch möglich sein die Zeigerposition zu finden, da sich dieser ja innerhalb der Ressource verändert, die der Funktion zur verfügung steht...
          Genau diese Problemstellung möchte ich ja lösen.

          1. Ahoi Rafael,

            Genau diese Problemstellung möchte ich ja lösen.

            Wie du es lösen kannst hab ich dir schon gesagt. Philip
            hat es dir etws genauer erklärt. Ohne Code kann ich dir zumindest nicht
            mehr helfen.

            MfG

          2. Es müsste doch möglich sein die Zeigerposition zu finden, da sich dieser ja innerhalb der Ressource verändert, die der Funktion zur verfügung steht...

            Eine solche Funktion gibt es in PHP nicht.

            Genau diese Problemstellung möchte ich ja lösen.

            Wie Du das ziemlich einfach erreichst, habe ich schon beschrieben.

      2. Ich kann dir leider nicht ganz folgen. Eine Funktion bekommt eine Ressource übergeben, deren Zeiger eventuell schon bewegt wurde. Nun möchte ich diese Ressource einmal durcharbeiten, wozu ich den Zeiger zurücksetzen und einmal durchlaufe.

        Der Datenzeiger wird bewegt, indem Du Zeilen aus der Ergebnisliste abholst. Also kannst Du nach jedem fetch_row usw. einen Counter hochzählen:

        $row = mysql_fetch_row($id);
        $counter++;

        1. Ahoi Philip,

          $row = mysql_fetch_row($id);
          $counter++;

          fals es dir nicht möglichsein sollte so die position herauszufinden gibt es natürlich auch noch andere möglichkeiten.

          Wie aber schon erwähnt gibt es keine get_mysql_ref_pos() funktion.
          zumindest habe ich im Manual keine gefunden.

          Du könntest:
          a) einfach das Select 2mal abschicken und in unterschiedlichen handlern speichern.
          b) mit mysql_affected_rows() herausfinden wieviel Datensätze es sind. dann in einer schleife:
          $counter=0;
          while($row=mysql_fetch_row()){$counter++;}
          die schleife nach restlichen elementen durchlaufen und dann mit einer einfach mathematischen rechnung herausfinden wieviele zuvor schon abgearbeitet wurden und dementsprechend die position ermitteln.

          MfG

          1. Ahoi Philip,

            $row = mysql_fetch_row($id);
            $counter++;

            fals es dir nicht möglichsein sollte so die position herauszufinden gibt es natürlich auch noch andere möglichkeiten.

            Warum sollte das nicht möglich sein? Jede abgeholte Zeile verschiebt den Pointer stets um eine Position. Also kann ich immer einen eigenen Pointer hochzählen.

            Du könntest:
            a) einfach das Select 2mal abschicken und in unterschiedlichen handlern speichern.

            Oder zwei Datenbankverbindungen in zwei Objekten, aber wozu?

            b) mit mysql_affected_rows() herausfinden wieviel Datensätze es sind. dann in einer schleife:
            $counter=0;
            while($row=mysql_fetch_row()){$counter++;}
            die schleife nach restlichen elementen durchlaufen und dann mit einer einfach mathematischen rechnung herausfinden wieviele zuvor schon abgearbeitet wurden und dementsprechend die position ermitteln.

            Was soll das bringen? Wenn kein Abbruch in der Schleife vorgesehen ist, steht der Pointer am Ende auf dem letzten Element. Wenn ich einen Counter mitlaufen lasse und Hitpoints in anderen Variablen zwischenspeichere, muß ich nichts rechnen.

            1. Ahoi Philip,

              Warum sollte das nicht möglich sein? Jede abgeholte Zeile verschiebt den Pointer stets um eine Position. Also kann ich immer einen eigenen Pointer hochzählen.

              So sieht es aus, du kannst das, ich kann das, aber der OP vll nicht?!?

              Oder zwei Datenbankverbindungen in zwei Objekten, aber wozu?

              Als alternativ lösung, ist war beknackt aber erstere Lösung sowohl
              von dir als auch mir vorgeschlagen scheint er nicht zu
              verstehen/aktzeptieren zu wollen.

              Was soll das bringen? Wenn kein Abbruch in der Schleife vorgesehen ist, steht der Pointer am Ende auf dem letzten Element.

              Jo, und im Zähler weiss ich wieviel es noch waren (von vor der
              schleife bis danach) und ich weiss wieviel es insgesamt sind => ich kenne die Position.

              Wenn ich einen Counter mitlaufen lasse und Hitpoints in anderen Variablen zwischenspeichere, muß ich nichts rechnen.

              so siehts aus, wie gesagt, das sind alternativen für den OP weil er
              mit der ersten und einfachsten Lösung die am wenigsten rechen und
              speicherverbrauch hätte wohl nicht zurecht kommt. Und nicht willens
              ist seine Problembeschreibung zu verbessern oder etwas Code zu
              liefern.

              MfG

              1. So sieht es aus, du kannst das, ich kann das, aber der OP vll nicht?!?

                Warum soll er es nicht können? Ich habe es ihm doch beschrieben.

                Was soll das bringen? Wenn kein Abbruch in der Schleife vorgesehen ist, steht der Pointer am Ende auf dem letzten Element.

                Jo, und im Zähler weiss ich wieviel es noch waren (von vor der
                schleife bis danach) und ich weiss wieviel es insgesamt sind => ich kenne die Position.

                Dazu reicht je nach Situation eine Abfrage von mysql_affected_rows oder mysql_num_rows. Dazu bedarf es keines Pointers.

                Wenn ich einen Counter mitlaufen lasse und Hitpoints in anderen Variablen zwischenspeichere, muß ich nichts rechnen.

                so siehts aus, wie gesagt, das sind alternativen für den OP weil er

                Das sind keine Alternativen, das ist Stuß, der keinen erkennbaren Zweck hat.

                mit der ersten und einfachsten Lösung die am wenigsten rechen und
                speicherverbrauch hätte wohl nicht zurecht kommt. Und nicht willens
                ist seine Problembeschreibung zu verbessern oder etwas Code zu
                liefern.

                Komm mal von dem hohen Roß runter. Er wird es wohl mittlerweile verstanden haben, so kompliziert ist das nun nicht.

                1. Ahoi Philip,

                  Warum soll er es nicht können? Ich habe es ihm doch beschrieben.

                  ich auch ansatzweise. Anfangen konnte er damit nix.

                  Dazu reicht je nach Situation eine Abfrage von mysql_affected_rows oder mysql_num_rows. Dazu bedarf es keines Pointers.

                  ??? anzahl-nichangeschauteElemente=position des pointers,... das war meine aussage.

                  Das sind keine Alternativen, das ist Stuß, der keinen erkennbaren Zweck hat.

                  Stuß nicht, nen Zweck hats auch, aber es ist unnötigen wegen der von uns gennanten einfachsten lösung.

                  Komm mal von dem hohen Roß runter. Er wird es wohl mittlerweile verstanden haben, so kompliziert ist das nun nicht.

                  keine Ahnung, er hat sich nimmer gemeldet.

                  MfG