![]() |
Datenbank: Mysql • Version: ? • Zugriff über: ?
Temporary table order problem
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? |
AW: Temporary table order problem
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. |
AW: Temporary table order problem
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 |
AW: Temporary table order problem
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. |
AW: Temporary table order problem
das klingt aber seltsam......
Falls Du den "rank" nicht benötigst, sollte ein
SQL-Code:
voll und ganz ausreichen.
order by Name,Punkte
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 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 by Thomas Breitkreuz