AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Ergebnismenge beschränken mit "LIMIT" oder "TOP"

Ergebnismenge beschränken mit "LIMIT" oder "TOP"

Ein Thema von Der schöne Günther · begonnen am 19. Feb 2018 · letzter Beitrag vom 22. Feb 2018
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
Der schöne Günther

Registriert seit: 6. Mär 2013
5.716 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 14:03
Datenbank: ᕦ[ •́ ﹏ •̀ ]⊃¤=[]::::::::> • Version: ┌༼◉ل͟◉༽┐ • Zugriff über: FireDAC
Eine ganz dumme, allgemeine Frage:

Eine SQL-Query lässt sich in ihrer Größe ja beschränken damit nur n Elemente zurückgegeben werden, in den meisten SQL-Dialekten scheint das LIMIT n oder TOP n zu sein.

Angenommen ich möchte die ersten 100 Treffer zurückgeben, aber auch wissen ob da noch mehr war. Sage ich "LIMIT 100" und bekomme weniger als 100 Treffer ist die Sache klar. Aber wie kann ich unterscheiden, wenn ich 100 Treffer bekomme ob es zufällig exakt 100 Treffer waren oder noch mehr?

Als Workaround fällt mir nur ein stattdessen in der Query mit n+1 zu arbeiten, die ersten n Treffer anzuzeigen und wenn die Ergebnismenge nun n+1 Treffer enthält dementsprechend eine Meldung einzublenden.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 14:06
Soweit ich weiß gibt es da in SQL keine Möglichkeit herauszufinden ob nach den 100 noch mehr kommt.
Außer vllt. mit nem Sub-Select mit dem du schaust wie viele Datensätze noch fehlen.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.262 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 14:09
Moin Günther,

oder Du fragst mit Hilfe von COUNT direkt die Gesamtzahl der Ergebnisse ab.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 14:13
Moin Günther,

oder Du fragst mit Hilfe von COUNT direkt die Gesamtzahl der Ergebnisse ab.
Dann muss er aber gruppieren, was evtl nicht erwünscht ist.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.797 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 14:20
Oder vorher
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
16.900 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 14:28
Als Workaround fällt mir nur ein stattdessen in der Query mit n+1 zu arbeiten, die ersten n Treffer anzuzeigen und wenn die Ergebnismenge nun n+1 Treffer enthält dementsprechend eine Meldung einzublenden.
Und was spricht dagegen diesen "Workaround" nicht das beste und einfachste Möglichkeit zu nehmen?
Es ist einfach, es ist verständlich und es funktioniert ohne weiter Zusätzliche Implementierung.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.854 Beiträge
 
Delphi 7 Professional
 
#7

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 15:10
Moin Günther,

oder Du fragst mit Hilfe von COUNT direkt die Gesamtzahl der Ergebnisse ab.
Dann muss er aber gruppieren, was evtl nicht erwünscht ist.
Seit wann muss man bei Count gruppieren?

Select top 100 * from tabelle where irgendwas
Select count(*) As Anzahl from tabelle where irgendwas

Select * from tabelle where irgendwas limit 100
Select count(*) As Anzahl from tabelle where irgendwas

Select * from tabelle where irgendwas and rownum <= 100
Select count(*) As Anzahl from tabelle where irgendwas

Select first 100 * from tabelle where irgendwas
Select count(*) As Anzahl from tabelle where irgendwas

Gruppieren muss man nur, wenn man mehr als die Anzahl zurückbekommen will, bzw. wissen will, wie oft bestimmte Werte vorkommen.

Das ist aber was vollkommen anderes, als eine Einschränkung per Top, Limit, First, Rownum und das Zählen der Sätze, die ggfls. insgesamt geliefert werden könnten.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.596 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 15:12
LIMIT 101 im Select und im Grid/DataSource dann nochmal auf 100 die Anzeige kürzen.

> in der Anzeige gibt es nur die 100, aber im DataSet mit >100 (ohne DataSet-Filter) sieht man ob es noch mehr gibt.


sowas?
SQL-Code:
Select top 100 count(*) As Anzahl from tabelle where irgendwas

Select count(top 100 *) As Anzahl from tabelle where irgendwas
oder ganz doof
select count(Select top 100 * from tabelle where irgendwas)

aber wo, wenn es auch so geht?
SQL-Code:
Select count(*) As Anzahl from tabelle where irgendwas
-- if Anzahl.AsInteger - Top - Limit > 100 then // 100=

Select count(*) - :Top - :Limit > 100 As Zuviel from tabelle where irgendwas
-- if Zuviel.AsBoolean then
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (19. Feb 2018 um 15:22 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.963 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 15:21
Und was spricht dagegen diesen "Workaround" nicht das beste und einfachste Möglichkeit zu nehmen?
Es ist einfach, es ist verständlich und es funktioniert ohne weiter Zusätzliche Implementierung.

Ich denke es spricht nichts dagegen, es war halt die Frage nach dem "was geht noch?".

Da DSG ja seine Anwendung gern recht kundenfreundlich gestaltet, wäre die Frage ja eher, was spricht wofür.

- Ein System, das mit exakten Angaben/Vorgaben arbeitet und entsprechend 100+(es gibt mehr) ausspuckt, nervt dezent, wenn es denn 101 sind oder 102 ..
- Ein System, was die Vorgaben nicht so genau nimmt und gleich die vorhandenen 109 Datensätze ausgibt, wäre cool
- Ein System, das genau 100 ausgibt, mit der Angabe "es gibt einige mehr" für +-25 und es gibt viel mehr für +-50 usw. wäre cool

Geschieht dies Ressourcen schonend, wäre es noch cooler und das ist ja neben dem Programmieraufwand, das einzige Argument, was gegen eine "schicke", "smarte" Lösung spräche. Wenn die Anwendung für so viel smartness 10 Sekunden zum "Rechnen" braucht, wird der Anwender darauf verzichten wollen.

In der Praxis macht es in vielen Fällen keinen Unterschied, ob noch mal ein separater Count mit der gleichen Where Clause abgefragt wird, warum also dann nicht? Bei einer "offenen Buchungsliste" wäre das allerdings dann vermutlich coolness am falschen Platz. Und bei manch "teueren" Abfragen ist man einfach froh, wenn sie halbwegs flott zurückkommen und stellt nicht noch weiter blöde Fragen.

Daneben gibt es noch technische Feinheiten wie Limit 100!=ab da hat sich niemand mehr Arbeit gemacht. Bspw. ..order by..limit 100 wird zumindest dafür sorgen, dass der Server garantiert die vollständige Menge bearbeitet. Gespart ist da also erstmal gar nichts, nur etwas Übertragung halt.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 15:29
Seit wann muss man bei Count gruppieren?

Select top 100 * from tabelle where irgendwas
[...]

Gruppieren muss man nur, wenn man mehr als die Anzahl zurückbekommen will, bzw. wissen will, wie oft bestimmte Werte vorkommen.
Ja super.
Das Problem ist nicht mit einer zweiten Abfrage die wirkliche Anzahl an Datensätzen festzustellen sondern in einer Query 100 Datensätze zu selektieren und anhand DIESES Ergebnisses ableiten zu können ob es noch mehr Daten gibt oder nicht. Und das geht mit Count nur wenn man gruppiert oder das Count (wie ich vorgeschlagen habe) in ein Subselect verlagert.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 20:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf