AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Temporary table order problem

Temporary table order problem

Ein Thema von EricMeyer · begonnen am 20. Jul 2017 · letzter Beitrag vom 21. Jul 2017
Antwort Antwort
EricMeyer

Registriert seit: 31. Mai 2012
Ort: Berlin
23 Beiträge
 
#1

Temporary table order problem

  Alt 20. Jul 2017, 19:49
Datenbank: Mysql • Version: ? • Zugriff über: ?
Hi,
Ich habe folgendes Problem

Ich habe eine Uniquerry, ein DatasetProvider, ein Clientdataset, eine Datasouce und dann ein grid von defexpress, als auch einen report gekoppelt über frxdbdataset.
Also erstmal einen ganz normalen Aufbau. Ich greife jetzt auf eine mysql DB.
Im SQL führe ich folgendes aus
Ich erzeuge eine temporäre Tabelle (Temporary table) und Sortiere sie sagen wir mal nach Punkten, dazu führe ich ein @count := @count +1 as Ranking aus.
Ich habe jetzt also eine Tabelle mit einem Ranking und den Punkten, außerdem den Namen der Leute.
Jetzt rufe ich die Tabelle mit einem select auf und sortiere sie dort neu nach dem Alphabet. Ziel ist also eine Tabelle zu haben, die nach Namen sortiert ist, aber das Ranking drin hat.

Im Delphi wird aber das zweite sortieren nach den Namen ignoriert, sprich in meinem Grid, also auch in meinem Report wird nur das erste Sortieren durchgeführt, also das nach den Punkten. Das seltsame daran, ich habe einen dbMonitor und eine MySqlWorkbench. Mit dem dbMonitor sehe ich, welcher mysql-code ausgeführt wird. Kopiere ich den Code und führe diesen in der Workbench aus, ist das Ergebnis, wie ich es haben möchte.
Nehme ich den order befehl aus der ersten (temporären) Tabelle raus, sortiert er auch in der zweiten Tabelle, wie ich es möchte.

Hat jemand eine Idee für das Problem oder, wie ich es umgehen kann?
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Temporary table order problem

  Alt 20. Jul 2017, 22:06
Hallo,

so ganz verstehe ich deine Anforderung noch nicht.
Geht es um die Auswertung nur der temporären Tabelle? Soll dann erst nach Ranking und als zweites nach Name sortiert werden? (order by Ranking, Name)

Ist im cxDBGrid evtl. eine Spalte auf Sortierung voreingestellt?
Bei gedrückter Shift-Taste lässt sich das cxDBGrid auch nach mehreren Spalten sortieren, also erst Ranking, dann nach Name. Die Sortierung der Spalten lässt sich auch zur Laufzeit setzen.

Ansonsten zeig mal deine SQL-Statement.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
EricMeyer

Registriert seit: 31. Mai 2012
Ort: Berlin
23 Beiträge
 
#3

AW: Temporary table order problem

  Alt 21. Jul 2017, 09:34
Ich erstelle das Ranking erst in der ersten Tabelle in dem ich in die Tabelle @rank := @rank + 1 as Rank, schreibe. Dadurch gibt es neue Spalte mit Rank. Diese ist logischer weise abhängig von der Sortierung in dieser ersten temporären Tabelle. Somit ist das Ranking abhängig von den Punkten, wonach in der ersten Tabelle sortiert wird.
Anschließend wird es in der zweiten Tabelle dann mitsortiert.

Die Theorie mit der sortierten Spalte, macht in so fern kein Sinn, weil es sonst ja nicht funktionieren würde, würde ich das order in der ersten Spalte auskommentieren. Danach geht die Sortierung in der zweiten. Vorher nur die in der ersten Tabelle.
Beispiel

Frank 100
Klaus 110
Josef 90
Alf 120
Uwe 80

Tabelle plus Ranking (temporäre Tabelle order by ranking)
1 Alf 120
2 Klaus 110
3 Frank 100
4 Josef 90
5 Uwe 80

(select temp_tabele order by Name)
jetzt alphabetisch:
1 Alf 120
3 Frank 100
4 Josef 90
2 Klaus 100
5 Uwe 80
  Mit Zitat antworten Zitat
EricMeyer

Registriert seit: 31. Mai 2012
Ort: Berlin
23 Beiträge
 
#4

AW: Temporary table order problem

  Alt 21. Jul 2017, 10:35
Okay, nach dem Gespräch mit dem Kollegen... Es liegt wohl daran, dass sich das Client ein falschen Index zieht. Ich mach deshalb die Sortierung jetzt über das ClientDataSet.
Dazu habe ich bei den Eigenschaften des ClientDatasets unter IndexDef so viele Indexe zugefügt, wie ich Sortierungen brauche, anschließend habe ich diesen dann Feldern zugeordnet, nach der Benennung in meinem SQL, sprich: Fields: Name und am Ende cdsPrint.IndexName := 'cdsIxName' eine Neusortierung ausgeführt.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Temporary table order problem

  Alt 21. Jul 2017, 11:49
das klingt aber seltsam......
Falls Du den "rank" nicht benötigst, sollte ein order by Name,Punkte voll und ganz ausreichen.
Daß für eine Sortierung ein Index notwendig sein soll, ist mir doch recht neu. U.U. ist er hilfreich aber notwendig?

Das ist doch alles sehr obskur.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 +1. Es ist jetzt 06:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz