AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL-Abfrage zerlegen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-Abfrage zerlegen

Ein Thema von borncrush · begonnen am 11. Jul 2007 · letzter Beitrag vom 12. Jul 2007
Antwort Antwort
Benutzerbild von borncrush
borncrush

Registriert seit: 18. Dez 2005
Ort: Berlin
115 Beiträge
 
Delphi XE7 Enterprise
 
#1

SQL-Abfrage zerlegen

  Alt 11. Jul 2007, 09:50
Datenbank: mySQL • Version: 4/5 • Zugriff über: zeosLIB 6.6 beta
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SQL-Abfrage zerlegen

  Alt 11. Jul 2007, 10:20
Stichwort Parser/Tokenizer
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

Re: SQL-Abfrage zerlegen

  Alt 11. Jul 2007, 10:23
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von borncrush
borncrush

Registriert seit: 18. Dez 2005
Ort: Berlin
115 Beiträge
 
Delphi XE7 Enterprise
 
#4

Re: SQL-Abfrage zerlegen

  Alt 11. Jul 2007, 10:43
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ß
  Mit Zitat antworten Zitat
Benutzerbild von borncrush
borncrush

Registriert seit: 18. Dez 2005
Ort: Berlin
115 Beiträge
 
Delphi XE7 Enterprise
 
#5

Re: SQL-Abfrage zerlegen

  Alt 12. Jul 2007, 09:18
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:22 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