Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ausgaben sortieren nach (https://www.delphipraxis.net/35283-ausgaben-sortieren-nach.html)

steppo 4. Dez 2004 19:31


Ausgaben sortieren nach
 
Hi Leute,
habe eine MySQL-Datenbank bei einem Provider in gebrauch.

Dort werden meinerseits Kundendaten gespeichert. Nun möchte ich die Daten nach der Auftragsnummer sortieren lassen.

Ich verwenden folgende Abfrage:
SQL-Code:
select * from Tabelle where auftragsnummer like'/864/%';
Die Auftragsnummer sieht so aus 'nummer(phpDatum(nicht formatiert))/feste Zahl/AuftragNr'.

Das ganze wird als string in die Datenbank übergeben.

Die Abfrage wird ohne Fehlermeldung ausgeführt, jedoch erhalte ich kein Ergebnis!

Ich verstehe meine Abfrage so.

Zeige mir alle Spalten von Tabelle wo die Auftragsnummer ähnlich 'Backslash 864 Backslash egal'; ist.

Wo ist mein Denkfehler?

Pr0g 4. Dez 2004 19:46

Re: Ausgaben sortieren nach
 
Die Abfrage sollte wohl so aussehen:
SQL-Code:
SELECT * FROM Tabelle WHERE auftragsnummer LIKE '%/864'
Denn sonst suchst du nur nach Nummern, die mit "/864" beginnen und einen beliebigen Text am Ende haben, so wie ich es verstanden habe, steht jedoch davor noch ein beliebiger Text.

Um die Ausgabe zu Sortieren, einfach "ORDER BY" hinten anhängen, bspw. so (weiß ja nicht wonach):
SQL-Code:
SELECT * FROM Tabelle WHERE auftragsnummer LIKE '%/864' ORDER BY id;
MfG Pr0g

steppo 5. Dez 2004 22:26

Re: Ausgaben sortieren nach
 
Hallo Pr0g

danke erst einmal für deine Antwort.

Die Auftragsnummer sieht so aus 'Nummer(phpDatum(nicht formatiert))/feste Zahl/AuftragNr'.

Ich suche nach der Auftragsnummre wobei der erste Teil bis zum ersten Slash, sowie der zweite Teil bis zum zweiten Slash (welcher eine feste Zahl ist) mir egal sind.
Wichtig ist mir der dritte Teil, also nach dem zweiten Slash('AuftragNr').

Dies möchte ich sortiert in aufsteigender Reihenfolge ausgegeben haben.

alcaeus 5. Dez 2004 22:34

Re: Ausgaben sortieren nach
 
Hi steppo,

nachdem dir die ersten Teile egal sind, muss das Statement wie bereits erwähnt
SQL-Code:
SELECT * FROM Tabelle WHERE auftragsnummer LIKE '%/864'
lauten.

Wenn nun nach der Auftragsnummer sortiert werden soll, dann lautet das Statement so:
SQL-Code:
SELECT * FROM Tabelle WHERE auftragsnummer LIKE '%/864' ORDER BY auftragsnummer ASC
Falls absteigend sortiert werden soll, musst du statt ASC einfach DESC verwenden.
Ich hoffe ich habe dich richtig verstanden.. :-?

Greetz
alcaeus

steppo 5. Dez 2004 22:44

Re: Ausgaben sortieren nach
 
Ich habe es mit ORDER BY, sowie ohne ORDER BY versucht. Beides löst keinen Fehler aus, bringt jedoch auch kein Ergebnis.

Ich möchte nach dem letzten drittel sortieren lassen, also nach AuftragNr. Der rest des strings soll nicht beachtet werden.

Daher meine Frage:
Wo liegt mein Fehler?

kiar 5. Dez 2004 22:55

Re: Ausgaben sortieren nach
 
hallo steppo,

baust du den sqlstring zur laufzeit zusammen, dann solltest du uns mal den quellcode zeigen, wie du das machst.


raik

edit:ich brauche einen neuen rechner, oder besser tastatur :mrgreen:

steppo 5. Dez 2004 23:31

Re: Ausgaben sortieren nach
 
Ich greife über phpMyAdmin 2.2.3

auf die Datenbank im Web zu und will lediglich die oben genannte Abfrage angezeigt bekommen.

steirer 6. Dez 2004 07:49

Re: Ausgaben sortieren nach
 
Hallo steppo, wenn ich dich richtig verstanden habe, ist der fixe Teil in der Mitte, der gesuchte Wert am Ende.

ich würde das so abfragen:

SQL-Code:
select * from Tabelle where auftragsnummer like'%/864/%';

steppo 6. Dez 2004 22:51

Re: Ausgaben sortieren nach
 
o.K. Leute, habe mich wohl nicht richtig ausgedrückt!

Der erste Teil variriert, ist für mich jedoch nicht relevant, also egal.
Der zweite Teil ist fix, immer 864.
Der dritte Teil ist jener der für mich interessant ist und der auch aufsteigend sortiert werden soll.

Das heißt Ihr habt alle mit euren Antworten recht. Die Abfrage sollte so aussehen:

SQL-Code:
select * from Tabelle where auftragsnummer like'%/864/';
ALso wie oben beschrieben:
Bis zum ersten Slash egal (%),
zweiter Teil = Fix(864)
dritter Teil =gesuchter Teil(AuftragsNr).

Das Problem ist, dass diese Abfrage ausgeführt wird (keine Fehlermeldung von Sql) jedoch kein Ergebnis ausgegeben wird!

jim_raynor 7. Dez 2004 06:18

Re: Ausgaben sortieren nach
 
Normalerweise kannst du mit Order By sortieren. Allerdings hast du hier das Problem, dass du in einem Tabellenfeld mehrere Informationen abgespeichert hast. Dies entspricht einem Schlechten Datenbankdesign. Wenn man es richtig machen möchte, müsstest du für jede Information eine eigene Spalte machen (also auch eine wo die Auftragsnr alleine steht).



SQL-Code:
select * from Tabelle where auftragsnummer like'%/864/'
Da fehlt doch noch die Auftragsnummer.

Richtig wäre vermutlich irgendwas wie:

SQL-Code:
select * from Tabelle where auftragsnummer like '%/864/'+gesuchteAuftragsNr

shmia 7. Dez 2004 08:46

Re: Ausgaben sortieren nach
 
Zitat:

Zitat von steppo
Die Auftragsnummer sieht so aus 'nummer(phpDatum(nicht formatiert))/feste Zahl/AuftragNr'.
Das ganze wird als string in die Datenbank übergeben.

Noch ein Hinweis zum Datenbank Design:
Felder, die aus mehreren Bestandteilen bestehen sollen nicht in einem Feld gespeichert werden.
Jede einzelne Bestandteil wird in einem eigenen Feld gespeichert.
In deinem Fall wären dies 3 Felder für "Datum", "feste Zahl" und "AuftragsNr".
Damit wird deine Abfrage 1.) stark vereinfacht und 2.) stark beschleunigt:
SQL-Code:
select * from Tabelle where AuftragsNr='864';
Nichts hindert dich daran, deine kombinierte Auftragnummer zusätzlich zu speichern;
es sind nun 4 Felder, eines davon ist redundant, es vereinfacht aber die Programmierung.

Hinweis zur Performance
Abfragen mit LIKE sind sehr langsam, da immer ein Full Table Scan erforderlich ist (alle Datensätze werden gelesen & verglichen).
Abfragen mit Feld='irgendeinwert' können sehr schnell sein, wenn auf dem Feld ein Index liegt.

steppo 7. Dez 2004 19:21

Re: Ausgaben sortieren nach
 
Vielen Dank für die reichhaltigen Antworten. Ich schließe daraus, dass eine Abfrgae in dieser Konstellation nicht möglich ist.
Danke nocheinmal für eure Mühe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 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