wie kann ich "query-Result-Cursor" zurücksetzen?

wie kann ich "query-Result-Cursor" zurücksetzen?

am 14.01.2005 19:28:45 von j_wenke

Hallo,
weiß nicht genau, obs daran liegt, aber ...

Problem ist, dass ich nach einer (3.) Abfrage nur den
letzten Wert (kein FALSE) behandelt erhalte.

Ich beziehe mich auf eine vorherige Abfrage (2.), die z.B. ergab:
280-294;353-368;515-529;576-588;615-664;706-707

Aus folgender 3. Abfrage
.........................
mysql_data_seek($result2, 0);
while($dsarray2 = mysql_fetch_array($result2)) {
$q3 = "SELECT name, lox, loy, rex, rey
FROM ras
WHERE '".$dsarray2[1]."' BETWEEN lox AND rex AND
'".$dsarray2[2]."' BETWEEN rey AND loy";
$result3 = mysql_query($q3);
$q3kennung = mysql_fetch_assoc($result3);
echo "id: ".$q2kennung['id']."=".$q3kennung['name']."
";
}
echo "\n";
.........................

erhalte ich nun als Ergebnis nur
eine Wert, der sich auf 706-707 bezieht.

Muß ich oder wie/wo kann ich "den Cursor" zurücksetzen.
Mir fällt da momentan nix ein.

Danke, Gruß, Jörg

Re: wie kann ich "query-Result-Cursor" zurücksetzen?

am 15.01.2005 01:31:18 von Heinz Hombergs

j wenke wrote:
> $q3 =3D "SELECT name, lox, loy, rex, rey
> FROM ras
> WHERE '".$dsarray2[1]."' BETWEEN lox AND rex AND
> '".$dsarray2[2]."' BETWEEN rey AND loy";


Der korrekte Syntay für BETWEEN AND ist WHERE fieldname BETWEEN value1 =

AND value2 und nicht WHERE value BETWEEN field1 AND field2.


--=20
Ich habe doch noch meine wahre Liebe gefunden - zu dumm nur, dass ich=20
mich nicht selbst heiraten kann!

Re: wie kann ich "query-Result-Cursor" zurücksetzen?

am 15.01.2005 01:47:18 von Hartmut Holzgraefe

Heinz Hombergs wrote:
> Der korrekte Syntay für BETWEEN AND ist WHERE fieldname BETWEEN value=
1=20
> AND value2 und nicht WHERE value BETWEEN field1 AND field2.

Nein, die Syntax ist

expr BETWEEN min AND max

expr, min und max sind dabei beliebige Ausdrücke, das können jeweils
nach Belieben Feldnamen, Konstanten oder berechnete Werte sein.

--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com

Are you MySQL certified? www.mysql.com/certification

Re: wie kann ich "query-Result-Cursor" zurücksetzen?

am 15.01.2005 01:52:39 von Thomas Hamacher

Heinz Hombergs schrieb:
> j wenke wrote:

>> $q3 = "SELECT name, lox, loy, rex, rey
>> FROM ras
>> WHERE '".$dsarray2[1]."' BETWEEN lox AND rex AND
>> '".$dsarray2[2]."' BETWEEN rey AND loy";

> Der korrekte Syntay für BETWEEN AND ist WHERE fieldname BETWEEN value1
> AND value2 und nicht WHERE value BETWEEN field1 AND field2.

Nö, die korrekte Syntax lautet:

[NOT] BETWEEN AND

Somit ist BETWEEN field1 AND field2 sowohl syntaktisch als auch
semantisch völlig korrekt, da ein Ausdruck nicht zwangsläufig statisch
sein muss.

Re: wie kann ich "query-Result-Cursor" zurücksetzen?

am 15.01.2005 02:57:23 von j_wenke

Hallo!
>...
> Somit ist BETWEEN field1 AND field2 sowohl syntaktisch als auch
> semantisch völlig korrekt, da ein Ausdruck nicht zwangsläufig statisch
> sein muss.
Danke,
mmh - also wie
http://dev.mysql.com/doc/mysql/de/Comparison_Operators.html ...

ergänzen möchte ich noch:

Nummerische Spaltentypen sind alle DOUBLE
MySql 3.23
php 4.2.1

Noch eine (fast zweite) Frage:
überraschenderweise ergibt ein:
$q3 = "EXPLAIN SELECT ...
eine
Notice: Undefined index: name
Ich wüßte nicht, warum mysql hier etwas unklar ist
(das wäre für mich nun noch das Klareste gewesen)??

Gruß, Jörg

Re: wie kann ich "query-Result-Cursor" zurücksetzen?

am 15.01.2005 07:54:45 von Hartmut Holzgraefe

j wenke wrote:
> Noch eine (fast zweite) Frage:
> überraschenderweise ergibt ein:
> $q3 =3D "EXPLAIN SELECT ...
> eine
> Notice: Undefined index: name
> Ich wüßte nicht, warum mysql hier etwas unklar ist
> (das wäre für mich nun noch das Klareste gewesen)??

Das ist eine reine PHP Fehlermeldung, du hast auf ein Arrayelement
"name" zugegriffen obwohl das Array kein Element mit diesem Index
hat.

Hast du einfach nur in deinem ursprünglichen Code das EXPLAIN
eingefügt? Dann liegt das Problem hier:

echo "id: ".$q2kennung['id']."=3D".$q3kennung['name']."
";
^^^^

Das Ergebnis eines EXPLAIN hat zwar eine Spalte "id" aber keine
Spalte "name":

> EXPLAIN SELECT User, Host FROM user;
+----+-------------+-------+-------+---------------+-------- -+---------+-=
-----+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | =
ref | rows | Extra |
+----+-------------+-------+-------+---------------+-------- -+---------+-=
-----+------+-------------+
| 1 | SIMPLE | user | index | NULL | PRIMARY | 228 | =
NULL | 4 | Using index |
+----+-------------+-------+-------+---------------+-------- -+---------+-=
-----+------+-------------+



--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com

Are you MySQL certified? www.mysql.com/certification

Re: wie kann ich "query-Result-Cursor" zurücksetzen?

am 15.01.2005 17:37:57 von j_wenke

Hallo und Danke!.
Ich wollte noch einmal detailierter versuchen,
Ergebnisse weiter zu verwenden.
Die Wertübergabe klappt aber nicht so einfach.
Letztendlich wird nur der letzte Datensatz behandelt:-((

Hier von $q1 über $q2 nach $q3:

// ===========================111111111111111================
$q1 -> $result1 : Ausgabe 12 Ergebnisse
...............................
// ===========================222222222222222222===========
mysql_data_seek($result1, 0);
while($erg1 = mysql_fetch_array($result1)) {
$q2 = "SELECT id, ost, nord
FROM wp
WHERE '".$erg1[0]."' = id";
$result2 = mysql_query($q2);
$q2kennung = mysql_fetch_array($result2);
echo $q2kennung['id']."=".$erg1[0].";"; // 12 Wertpaare ok
($erg aus $q1)
// aber auch hier bei EXPLAIN SELECT ...: Undefined index: id - steht
doch im SELECT ???
}
echo "
\n";
echo mysql_affected_rows()." affected_rows
"; // nur 1 affected_rows ??
// ===========================333333333333333333333========
mysql_data_seek($result2, 0);
while($erg2 = mysql_fetch_row($result2)) {
$q3 = "SELECT kname, lox, loy, rex, rey
FROM ras
WHERE '".$erg2[1]."' BETWEEN lox AND rex AND
'".$erg2[2]."' BETWEEN rey AND loy";
$result3 = mysql_query($q3);
// ---------- Meldungen -------------------
if (!$result3) {
print mysql_error();
die("q3 $q3 ist ungültiges SQL."); }
if (mysql_num_rows($result3) == 0) {
echo "nix gefunden
"; }
// ----------------------------
$q3kennung = mysql_fetch_array($result3);
echo "id: ".$erg2[0]."=".$q3kennung["name"]."
";
// Ausgabe hier nur den
letzten von 12 - eigentlich alle
}
echo "\n";
...............................

mit $erg_ wollte ich vorherige Querys uebernehmen -
probiert auch mit je einer 2., "includierten" while-Schleife,
bekomme ich aber keine Ergebnisse.
Was sehe ich da nicht?
Wieso funktioniert die $q3 nicht so wie $q2?

Danke für Hilfen, Jörg

Re: wie kann ich "query-Result-Cursor" zurücksetzen?

am 19.01.2005 02:31:34 von j_wenke

Hallo,
ich habe den Code noch mal etwas schöner gemacht -
nach bestem (momentanen) Wissen -
vielleicht mag sich ja mal jemand daran probieren.
Das wäre schön!
Es ist nicht leicht - ich komm jedenfalls momentan
nicht weiter.

Wie gesagt - es geht um das Weitergeben/Bereithalten eines
Queryteiles für weitere Querys.

Die Schwierigkeit scheint mir die dritte Query und
hier noch spez. diese BETWEEN-Sache und daraus
noch jeweils den MIN(Datensatz) zu zeigen.

So wie?s jetzt aussieht, erhalte ich (immer noch -
habe schon Diverses probiert)
aus dem letzten Datensatz der 2. Query in der 3. Query
2 Treffer - von denen wiederum möchte ich nur den MIN haben.

Ich bin ja mal gespannt, wie das geht.
Oder vielleicht gibts irgendwo ein gutes Beispiel?
Ich sehe nicht, weshalb ich in der 3. Q. nur auf den
letzten Datensatz der 2. Q. zugreifen kann???

Danke,
Gruß, Jörg


// =====================query======111111111111111111========== =
$q1 = "SELECT id1
FROM tabelle1
WHERE ".$q1_where;
$result1 = mysql_query($q1, $link);
while($arr2 = mysql_fetch_assoc($result1)) {
echo $arr2['id1'].";"; } // 12 Datensätze ok

// ======================query=====222222222222222222========== =
mysql_data_seek($result1, 0);
while($arr3 = mysql_fetch_row($result1)) {
$q2 = "SELECT id2, feld1, feld2
FROM tabelle2
WHERE id2 = '".$arr3[0]."'";
$result2 = mysql_query($q2);
$arr4 = mysql_fetch_assoc($result2);
echo $arr4['id2']."=".$arr3[0].";"; } // 12 Wertpaare ok
echo "
\n"; echo mysql_affected_rows() . "
"; // 1

// ======================query=====333333333333333333333======= ====
mysql_data_seek($result2, 0);
while($arr5 = mysql_fetch_row($result2)) {
$q3 = "SELECT feld3, feld4, feld5, feld6, feld7, feld8
FROM tabelle3
WHERE '".$arr5[1]."' BETWEEN feld4 AND feld6 AND
'".$arr5[2]."' BETWEEN feld7 AND feld5
"; // <--- MIN(feld8) - versucht
$result3 = mysql_query($q3);
echo mysql_affected_rows() . "
"; // 2
while($arr6 = mysql_fetch_assoc($result3)) {
echo "id2: ".$arr5[0]."=".$arr6["feld3"]."
"; }}
echo "\n";