![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Inventar
![]() Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343
|
![]() ich habe das problem, daß ich 2 mysql_fetch_object hintereinander machen muß, die beide dasselbe auslesen, sich jedoch an unterschiedlichen stellen befinden.
$sql = "SELECT * FROM db"; $abfrage = mysql($sql, $verbindung); while ($row = mysql_fetch_object($abfrage)) { $vorname = $row->vorname; } ... while ($row = mysql_fetch_object($abfrage)) { $vorname = $row->vorname; $nachname = $row->nachname; } später dann wird in die 2. whileschleife jedoch nichtmal reingegangen. interessant ist, daß das skript perfekt funktioniert, wenn ich die 1. db-auslese weglasse, sobald sie jedoch drin ist, wird die 2. whileschleife nichtmal betreten. weiß jemand, wo das problem liegt?
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret." Then he pulled the trigger of his BFG9000. |
![]() |
![]() |
![]() |
#2 |
Inventar
![]() Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343
|
![]() aber ich denke, es ist sicherlich für andere auch interessant, die vorher nicht gewußte haben, daß in einem solchen fall der abfragepointer VOR DER 2. ABFRAGE auf die position 0 zurückgesetzt werden muß, um eine völlig neue abfrage zu starten und zwar mit:
mysql_data_seek($abfrage, 0); passiert das nicht, geschieht die 2. abfrage anschließend an das ende der 1., d.h. der pointer fährt einfach noch weiter runter, findet nix (denn die 1. abfrage war ja deswegen zu ende, nach nix kommt wieder nix) und somit wird die 2. whileschleife auch niemals durchlaufen.
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret." Then he pulled the trigger of his BFG9000. |
![]() |
![]() |
![]() |
#3 |
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.631
|
![]() Das Fetch holt die mit Select * from Tabelle gewünschten Datensätze heraus, ein sogenannter 'Cursor' zeigt jeweils auf den akutellen Datensatz. Wird ein Fetch abgesetzt kommt dieser Datensatz in die Datensatzvariablenfelder hinein. Zusätzlich wird der Cursor auf den nächsten Datensatz gestellt. Der Cursor ist also ein Datensatzzeiger. Ist die erste while Schleife erschöpft (keine weiteren Datensätze mehr vorhanden), ist es die zweite logischerweise auch, falls kein neuerlicher Select Befehl abgesetzt wird. Oder eben ein Seek. Bei beiden Befehlen bzw. im Zuge beider Befehle wird auch jeweils der Cursor auf den ersten passenden Datensatz gesetzt. Je nachdem ob über einen Index zugegriffen wird, sortiert wird, bzw. mittels 'WHERE' Bedingung eine Filter-Einschränkung angewendet wird, entscheidet sich, welcher Datensatz der erste ist und welche Datensätze qualifiziert sind. Der Datensatz, der als erster 'matcht', steht dann beim ersten Fetch-Aufruf bereit. Das ganze Schleifenspiel geht so lange bis der Cursor auf keinen qualifizierenden Datensatz gestellt werden kann und die while Bedingung wird zu FALSE. Deswegen also wenn eine weitere - SEPERATE - while Schleife notwendig ist, muß auch ein Select davor gemacht werden. Ist eigentlich logisch, denn ein Fetch ist ja kein Select.
mfg Kikakater |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|