![]() |
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 |
Re: SQL-Abfrage zerlegen
Stichwort Parser/Tokenizer
|
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 |
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ß |
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 23:22 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-2025 by Thomas Breitkreuz