Auswahlbereiche mit Select bei Postgresql.

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Rebell
Beiträge: 997
Registriert: 14.01.2003 20:36:53
Wohnort: Dresden

Auswahlbereiche mit Select bei Postgresql.

Beitrag von Rebell » 06.08.2004 16:05:40

Hallo Leute.

Ich hab ne wichtige Frage und ich hoffe ihr kennt euch aus.

Ich habe ein XML-basiertes PHP-Skript geschrieben was nach Attributen Datensätze aus einer Datenbank liest. Dieses XML-Element hat auch die Möglichkeit nur eine gewissen Anzahl an Datensätzen aufzulisten um den Benutzer nicht mit einer Liste von 500 Datensätzen zu konfrontieren hat er die Möglichkeit über Buttons links und rechts in 50er Schritten weiterzublättern.

Das Problem an der Sache ist: Der Auswahlbereich wird im PHP abgeschnitten, während die restlichen Daten verloren gehen. Das Datenbank-Backend liest aber immer 500 Stück ein und ich sammle mir die passenden 50 herraus.

Ist es möglich in einer Select-Anweisung die eine unbestimmte Anzahl an betroffenen Zeilen zurückgeben würde einen Bereich zur Rückgabe auszuwählen?

Kurz gesagt:

select * from table;
Gibt mir 500 Stück zurück
Ich will aber von den 500 erst ab 300 limit 50.
Also bekomm ich von der Datenbank gefundenen Datensatz 300 - 350 aus select * from table;
come to daddy, windowlicker!
get m:ke - http://get-mike.de

Benutzeravatar
dmeister
Beiträge: 258
Registriert: 05.07.2002 08:01:53
Wohnort: Zürich
Kontaktdaten:

Beitrag von dmeister » 06.08.2004 16:07:41

MySQL kann das AFAIK. Ist aber meines Wissens nach nicht SQL-Standard.
Jabber: neptoon@jabber.org
It's only Rock'n'Roll but I like it

Benutzeravatar
Stefan.K
Beiträge: 148
Registriert: 06.03.2003 10:49:06
Wohnort: Schweiz
Kontaktdaten:

Beitrag von Stefan.K » 07.08.2004 17:58:16

Hallo MySQL wäre,

Code: Alles auswählen

Select * from XYZ limit $limstart,$limit;
Bei PostgreSQL weiß ich leider nicht ob das funktioniert und habe auch keine zum testen laufen.

Edit:
Wobei $limitstart der Startdatensatz ist und $limit die Anzahl der rückgelieferten Datensätze.
Ubuntu Gutsy Gibbon, 2.6.20

Benutzeravatar
weedy
Beiträge: 585
Registriert: 02.11.2002 21:47:49
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Beitrag von weedy » 08.08.2004 17:02:24

Code: Alles auswählen

select ... limit 10 offset 20
Liest 10 Datensätze ab dem zwanzigsten aus.

weedy.

Benutzeravatar
Rebell
Beiträge: 997
Registriert: 14.01.2003 20:36:53
Wohnort: Dresden

Beitrag von Rebell » 09.08.2004 12:17:56

Coole Sache, das funktioniert mit Postgresql.

Hat man dadurch Geschwindigkeitsvorteile? Kommt mir irgendwie nicht so vor.
Gibt es noch eine Möglichkeit sich parallel ausgeben zu lassen wieviele Datensätze ohne offset und limit betroffen werden? Oder brauch ich dafür nen Select-Prefetch?
come to daddy, windowlicker!
get m:ke - http://get-mike.de

Benutzeravatar
bodo99
Beiträge: 60
Registriert: 12.05.2003 11:53:13
Wohnort: Bamberg

Beitrag von bodo99 » 09.08.2004 14:00:37

Benutz dazu das explain Kommando.
->

Code: Alles auswählen

EXPLAIN SELECT * FROM foo;
                           QUERY PLAN
---------------------------------------------------------
 Seq Scan on foo  (cost=0.00..155.00 rows=10000 width=4)
(1 row)

Antworten