Avatar billede mireigi Novice
21. marts 2012 - 22:15 Der er 7 kommentarer og
1 løsning

Dynamisk Query Builder

Hej,

Jeg er i gang med at lave et program, hvor man kan bygge og gemme forespørgsler mod en database. Programmet skal indgå i et større program, og skal heri fungere som et værktøj til at lave avancerede statistikker.

Alting i programmet virker fint, men nu er jeg kommet til et problem:
Nestede betingelser (parenteser i WHERE).

Jeg er i stand til at lave nedenstående:
SELECT Person.Navn, Adresse.PostNr
FROM Person
INNER JOIN PersonAdresse ON Person.ID = PersonAdresse.PersonID
INNER JOIN Adresse ON Adresse.ID = PersonAdresse.AdresseID
WHERE (Person.JobTitel = 'Udvikler' AND Person.Alder > 30) OR
(Person.JobTitel = 'Designer' AND Person.Alder < 30)


Nu vil jeg så gerne udvide ovenstående til dette:
SELECT Person.Navn, Adresse.PostNr
FROM Person
INNER JOIN PersonAdresse ON Person.ID = PersonAdresse.PersonID
INNER JOIN Adresse ON Adresse.ID = PersonAdresse.AdresseID
WHERE (Person.JobTitel = 'Udvikler' AND (Person.Alder > 30 OR Person.Koen = 'Mand')) OR
(Person.JobTitel = 'Designer' AND (Person.Alder < 30 OR Person.Koen = 'Kvinde'))


Koden kan ses her:
http://pastebin.com/nynXmxHD

Nogen der har en god måde at håndtere det på?

Forbedringer og forslag er også meget velkomne.
Avatar billede arne_v Ekspert
22. marts 2012 - 01:56 #1
Mit forslag: tilfoej de enkelte betingelser som parentes fri postfix notation og konverter saa til infix notation med parenteser.
Avatar billede arne_v Ekspert
22. marts 2012 - 01:57 #2
Jeg kan ioevrigt ikke helt se pointen med den query builder, men det er saa en anden sag.
Avatar billede mireigi Novice
22. marts 2012 - 12:23 #3
Tak for indlæg :)

Pointen er, som nævnt i oprindeligt indlæg, at give brugerne mulighed for at trække data ud til brug i analyser. Deres forespørgsler kan så gemmes i systemet for nem brug senere.

Selve GUI'en der kommer foran query builderen vil være lig den SQL builder man kan bruge design time i Visual Studio. Men i stedet for at brugerne ser en masse tabelnavne og felte, får de vist mere sigende navne, som så relaterer til en tabel i databasen.

Jeg ved ikke om det giver mening, men, hvis du har et bedre forslag til at give den ønskede funktionalitet, er jeg åben for forslag :)
Avatar billede arne_v Ekspert
02. april 2012 - 04:50 #4
Og hvordan skal de angive parenteser i den GUI?

Maaske kan problemet loeses mellem GUI og en anden data struktur end de lister.

Men hvis du skal have listerne, saa maa forslaget i #1 vaere det rigtige.
Avatar billede mireigi Novice
02. april 2012 - 16:51 #5
GUI delen bliver ligesom den der bliver brugt af Microsoft BizTalk til at sætte filtre op på porte, hvis du har kendskab til det :)
Avatar billede arne_v Ekspert
02. april 2012 - 17:01 #6
Det har jeg ikke.
Avatar billede mireigi Novice
12. april 2012 - 17:02 #7
Har droppet at finde en løsning, da det blev for bøvlet.

Arne, læg et svar, hvis du vil have point, ellers lukker jeg om 8 dage.
Avatar billede arne_v Ekspert
13. april 2012 - 00:55 #8
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester