![]() |
Datenbank: Firebird • Version: 1.5.2 • Zugriff über: Delphi 7 Professional + Zeos-Lib.
Firebird und LIMIT bei SELECT
Hallo allerseits,
kann es sein, dass Firebird das LIMIT bei SELECT nicht kennt? SELECT * FROM Tabelle ORDER BY Feld1 LIMIT 20 ergibt bei mir eine Fehlermeldung. Welche Alternativen kann ich hier verwenden, wenn ich immer nur die nächsten xx Datensätze auslesen möchte? mfg Herbert |
Re: Firebird und LIMIT bei SELECT
Hat sich erledigt - hab es bereits selbst rausgefunden:
SELECT FIRST 20 * FROM .... mfg Herbert |
Re: Firebird und LIMIT bei SELECT
hallo,
ich weis nicht ob firebird einen Limit bezeichner hat. aus ib zeiten habe ich zwei stored proceduren von kosch , die das erledigen , damit bin ich aber auch zufrieden. wenn du den quelltext möchtest, dann eine PN an mich. raik Edit// das ist ja einfach, werde wohl oder übel mich mal wieder intensiver mirt firebird beschäftigen müssen :wall: |
Re: Firebird und LIMIT bei SELECT
Hallo kiar,
LIMIT geht einwandfrei bei Firebird und zwar mit folgender Syntax: SELECT FIRST xx SKIP yy <column1, column2> FROM <table> ORDER BY <column1> wobei xx der Anzahl an Zeilen entspricht, die du zurückbekommst, wobei yy Zeilen vorher übersprungen werden. Was ich noch suche: Eine Möglichkeit, die das gleiche unter MSSQL macht - bisher leider nichts gefunden. mfg Herbert |
Re: Firebird und LIMIT bei SELECT
Zitat:
SQL-Code:
SELECT TOP N
|
Re: Firebird und LIMIT bei SELECT
Hallo ihr,
in mySQL kann ich ja folgendes schreiben:
SQL-Code:
Wie wuerde der Befehl in Firebird aussehn? Sind Skip die Anzahl Zeilen die Uebersprungen werden, also so:
SELECT * FROM tablename ORDER BY somefield LIMIT 15, 30
SQL-Code:
Ich will ja ab dem 30. Datensatz 15 haben, also muss ich 29 ueberspringen, sehe ich das richtig?
SELECT FIRST 15 SKIP 29 FROM tablename ORDER BY somefield
Thanks and Greetz alcaeus |
Re: Firebird und LIMIT bei SELECT
Ehrlich gesagt halte ich herzlich wenig von solchen Konstrukten.
Ist ähnlich wie setLength in .Net : Es sieht so simple aus, dass man schnell vergisst wieviele Resourcen man dabei verbrät... Du kannst das in FB simulieren indem du eine selectable procedure schreibst, die einfach ein SELECT first ZuÜberschringende+ZuSelektierende records ausführt. Innerhalb der schleife verwirfst du die zu überspringenden Datensätze. Und schon sieht man ganz gut, warum sowas ziemlich viel Rechenzeit den Gullie runterspült... |
Re: Firebird und LIMIT bei SELECT
Nichts fuer ungut Robert, aber da gibt es ein paar Problemchen.
Ich brauche das, weil ich ein zusaetzliches Datenbankmodul fuers phpBB2 baue. Dieses Modul abstrahiert die Funktionen, so dass es dem Anwendungsscript herzlich egal ist, welche DB dahintersteckt ;) Bei DB-Systemen die LIMIT x, y nicht verstehn, muss ich das also umbiegen. Procedures kaemen hier nicht in Frage, dazu muessten sehr viele Queries im phpBB angepasst werden, und das will ich mir nicht antun. Es geht nur darum, ob ich 1 subtrahieren muss oder nicht, also ob die Anzahl nach SKIP x wirklich uebersprungen werden, und erst der x+1te Datensatz als erster zurueckkommt. Greetz alcaeus |
Re: Firebird und LIMIT bei SELECT
Du kannst in eine selectable procedure genauso abfragen wie eine Tabelle.
Du bekommst natürlich etwas Overhead. Zusätzlich zu dem bestehenden Overhead von solchen "ich frage mal 1.000 Datensätze ab, die ich gleich wegwerfe" Abfragen... |
Re: Firebird und LIMIT bei SELECT
Ich glaube wir reden ein klein bisschen aneinander vorbei, ich hole mal etwas weiter aus.
In den verschiedenen Dateien des phpBBs werden die Queries so ausgefuehrt:
Code:
$db ist dabei ein Objekt von sql_db, einer Klasse die je nach eingestelltem DBMS anders definiert ist. Ich baue eben eine neue sql_db-Klasse, also weiss ich momentan nicht wie ich da mit einer selecteable Procedure arbeiten soll.
$sql = "SELECT * FROM sometable ORDER BY id ASC LIMIT 15,15;
if (!($result = $db->sql_query($sql))) { //... } In meiner sql_query spalte ich das uebergebene Query mit einer RegExp ausseinander um Limit und Start zu erhalten, und setze dann das neue Query zusammen. Die Frage ist nur, ob ich im obigen Fall das:
SQL-Code:
oder das:
SELECT FIRST 15 SKIP 14...
SQL-Code:
schreiben muss :gruebel:
SELECT FIRST 15 SKIP 15...
Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz