zeilennummer

zeilennummer

am 05.10.2007 09:41:28 von letters

Hallo,

ich habe eine Abfrage, die ich mit LIMIT begrenze also,
Select ..... LIMIT $start, 1

Wobei $start meine Variable mit dem Startwert aus php ist. Wenn ich jetzt
einen neuen DS in die DB eintrage, kann der ja an jede freie Stelle gesetzt
werden. Die ID kann ich mit LAST_INSERT_ID auslesen. Wenn ich dann aber
meinem SELECT Statement den Sartwert für LIMIT übergeben will nutzt mir die
ID nichts. Ich brauch die Nummer der Zeile der gerade eingegeben ID im
mysql_query. Gibt es eine Möglichkeit für ein Statement wie
SELECT .... FROM .... WHERE ID = 25 auch herauszufinden, welche
Zeilennummer das in der DB ist? Dann könnte ich diesen DS wieder mit LIMIT
auslesen.

mfg

Mathias

Re: zeilennummer

am 05.10.2007 09:44:54 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: zeilennummer

am 05.10.2007 10:12:55 von letters

Am Fri, 5 Oct 2007 09:44:54 +0200 schrieb Andreas Kretschmer:

> begin Mathias Fiedler schrieb:
>> mysql_query. Gibt es eine Möglichkeit für ein Statement wie
>> SELECT .... FROM .... WHERE ID = 25 auch herauszufinden, welche
>> Zeilennummer das in der DB ist? Dann könnte ich diesen DS wieder mit LIMIT
>> auslesen.
>
> In der DB selbst gibt es keine 'Zeilennummer'. Ohne ORDER BY ist die
> Reihenfolge im Result eher zufällig.
>
>
> end
> Andreas

Ein Order BY hat die Select Anfrage auch noch. Es geht um die
>> Möglichkeit << des Auslesens der Zeilennummer.

Mathias

Re: zeilennummer

am 05.10.2007 10:20:41 von Gregor Kofler

Mathias Fiedler meinte:

> Ein Order BY hat die Select Anfrage auch noch. Es geht um die
>>> Möglichkeit << des Auslesens der Zeilennummer.

Ohne dass sich mir der Sinn so richtig erschließt...

select count(*) as Zeilennummer from foo where fooID <= newID.


Gregor


--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: zeilennummer

am 05.10.2007 10:55:25 von letters

Am Fri, 05 Oct 2007 10:20:41 +0200 schrieb Gregor Kofler:

> Mathias Fiedler meinte:
>
>> Ein Order BY hat die Select Anfrage auch noch. Es geht um die
>>>> Möglichkeit << des Auslesens der Zeilennummer.
>
> Ohne dass sich mir der Sinn so richtig erschließt...
>
> select count(*) as Zeilennummer from foo where fooID <= newID.
>
>
> Gregor

Das könnte klappen.

Re: zeilennummer

am 05.10.2007 11:00:38 von Axel Schwenke

Mathias Fiedler wrote:
> Am Fri, 5 Oct 2007 09:44:54 +0200 schrieb Andreas Kretschmer:
>
>>> mysql_query. Gibt es eine Möglichkeit für ein Statement wie
>>> SELECT .... FROM .... WHERE ID = 25 auch herauszufinden, welche
>>> Zeilennummer das in der DB ist? Dann könnte ich diesen DS wieder mit LIMIT
>>> auslesen.
>>
>> In der DB selbst gibt es keine 'Zeilennummer'. Ohne ORDER BY ist die
>> Reihenfolge im Result eher zufällig.
>
> Ein Order BY hat die Select Anfrage auch noch. Es geht um die
>>> Möglichkeit << des Auslesens der Zeilennummer.

ES. GIBT. KEINE. ZEILENNUMMER!!!
Was nicht da ist, kannst du auch nicht auslesen.


Du kannst natürlich die Zeilen in einem Ergebnis durchnumerieren, wenn
dir das Spaß macht:

mysql> set @nr=0;
Query OK, 0 rows affected (0,00 sec)

mysql> select @nr:=@nr+1 as lfdnr, table_name from information_schema.tables;
+-------+---------------------------------------+
| lfdnr | table_name |
+-------+---------------------------------------+
| 1 | CHARACTER_SETS |
| 2 | COLLATIONS |
| 3 | COLLATION_CHARACTER_SET_APPLICABILITY |
| 4 | COLUMNS |
| 5 | COLUMN_PRIVILEGES |
| 6 | ENGINES |
....

Aber für die Datenbank bedeuten die Nummern *gar* nichts. Insbesondere
kannst du dich ohne weiteres auch nicht darauf verlassen, daß zwei
aufeinanderfolgende SELECTs dieser Art die gleiche Numerierung ergeben.
Auch nicht mit ORDER BY. Schließlich kann ja ein anderer Client die
Daten zwischenzeitlich verändern.

Wenn du in SQL einen bestimmten Datensatz ansprechen willst, nimm einen
Schlüssel. Normal sollte jeder Datensatz bereits einen solchen haben.
Wenn du Beziehungen der Art "der dritte Datensatz vor Datensatz X in
SELECT Y" auflösen willst, dann laß SELECT Y den Schlüssel mit ausgeben
und verwende den dann zum Zugriff. Alles andere ist Pfusch.


XL