Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Abfrage zerlegen (https://www.delphipraxis.net/95664-sql-abfrage-zerlegen.html)

borncrush 11. Jul 2007 08:50

Datenbank: mySQL • Version: 4/5 • Zugriff über: zeosLIB 6.6 beta

SQL-Abfrage zerlegen
 
Hallo DPler,

ich möchte gerne ein SQL-Statement in sehr kleine Fragmente zerlegen. Dabei sollte ungefähr dieses Ergebnis folgen:

SQL-Statement:
SELECT contacts.longname, count(*) as a_counter FROM rts,contacts WHERE ((rts.group=@groupid@) AND (rts.date LIKE ‘2007-06-__’)) GROUP BY rts.contact ORDER BY contacts.longname ASC LIMT 15;

Ausgewertete Daten:
Anzeigefelder:
Contacts.longname
Count(*) as a_counter

Bedingungen:
Rts.group=@groupid@
Rts.date like ‘2007-06-__’

Gruppierungsfeld:
Rts.contact

Sortierung:

Aktiv (contacts.longname)

Extra-Merkmale:
Limit 15


Leider fehlen mir die Ansätze, doch weiß ich schon mal, dass ich hier “pos” und “copy” benutzen sollte. Jedoch ist mir überhaupt nicht klar…wie der Algorithmus „aussehen muss“ bzw. wie ich da nur vorgehe.

Ich hoffe, dass jemand mir hier weiterhelfen kann. Vielleicht auch mit kleinen Beispielen.

Vielen Dank im Voraus.

Mit freundlichen Grüßen
Dave

mkinzler 11. Jul 2007 09:20

Re: SQL-Abfrage zerlegen
 
Stichwort Parser/Tokenizer

DeddyH 11. Jul 2007 09:23

Re: SQL-Abfrage zerlegen
 
Nur mal als Denkanstoß: Eine Abfrage muss zumindest ein SELECT und ein FROM enthalten (wobei ich mir mit dem FROM bei MySQL nicht ganz sicher bin). Wenn Du nun aus dem SQL alles zwischen SELECT und FROM herauskopierst, hast Du bereits die abgefragten Felder, die Du gff. weiter unterteilen musst. Nun suchst Du nach WHERE und kopierst nun alles zwischen FROM und WHERE, um die abzufragenden Tabellen zu ermitteln. Auch hier musst Du ggf. weiter unterteilen. Und so geht das immer weiter. Allerdings ist das eine Heiden-Arbeit, da ja auch JOINs etc. enthalten sein können. Für Dein Endergebnis würde ich mich interessieren.

Viel Erfolg

borncrush 11. Jul 2007 09:43

Re: SQL-Abfrage zerlegen
 
Also erstmal danke an euch beide.

Die Verfahren Parser und Tokenizer sind mir bekannt, jedoch scheue ich den Aufwand. Dachte nur, dass vielleicht dies schon einer mal programmiert hatte und sein Wissen teilt :).

Also das Ganze wird scheinbar sehr komplex. Mal zu dem Hintergrund: Mein Vorhaben besteht darin, dass ich ein BI (Business Intelligence) - Modul für MySQL-DB's programmieren möchte, dabei soll der Anwender die Abfrage nicht von Hand schreiben, sondern mithilfe eines Editors bearbeiten. Da man auch die Abfragen bearbeiten können muss, ist es notwendig die Abfrage wieder zu zerlegen.

Nun hatte ich mir überlegt die Abfrage nicht fest in die DB zu schreiben, sondern die Bestandteile in spez. Tabellen abzulegen, sodass die Abfrage zu Laufzeit erstellt wird. Sprich es gibt Tabellen mit folgenden Strukturen und Inhalten:

Delphi-Quellcode:
TABELLE BI_AnzeigeFelder
id   abfrageID  TabellenFeld
1     3           contacts.longname
2     3           count(*) as a_counter

TABELLE BI_Bedingungen
id  abfrageID   Bedingung
1    3            rts.group=5
2    3            rts.date LIKE '2007-06-__'

TABELLE BI_GruppierungsFeld
id  abfrageID   Bedingung
1    3            rts.contact

Usw. Ich denke mal das Grundprinzip ist klar. Macht dies Sinn, wenn ich meine Programmierung in diese Richtung lenke?

Gruß

borncrush 12. Jul 2007 08:18

Re: SQL-Abfrage zerlegen
 
Nagut, warscheinlich nicht sinnvoll, meine zweite Frage hier zustellen...
werde den Thread demzufolge nachmittags schließen.
Bis dahin würde ich mich natürlich trotzdem über Anmerkungen freuen :).

Gruß
Dave


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