0

Suchmaschine elegant programmieren?

Hallo

ich greife per Suchmaschine auf eine Tabelle mit Wohnungen und Häuser zu. Dder Zweck davon ist eine Ansicht zu präsentieren, die dann per Befehlsschaltfläche in eine "Schattenuntertabelle" zwecks formatiertem Drucken gewandelt werden kann. Anschliessend wird die Tabelle wieder gelöscht.Soweit kein Problem.

Die Suchfelder sind Name, Ort, Anzahl Zimmer, maximaler Preis. Das ergibt, weil man ja auch die Felder leer lassen kann und nur nach Name oder nur nach Preis oder beliebig kombinierbar suchen kann, 15 verschachtelte if then else-Anweisungen nach dem System

if Name... then select .... where Tablle.Name = Name else

if Name and Ort then select ... where Tabelle.Name = Name ans Tabelle.Ort= Ort else.....

Es gibt bestimmt eine elegantere Mehode, mir fällt nur keine ein. Hilfe!

 

lg

Arsène

9 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Arsène, um die Formulierung aller möglichen select-Anweisungen wirst du wahrscheinlich nicht herumkommen. Ich habe bisher vergeblich versucht, mehrere Bedingungen innerhalb des "select" über if-Anweisungen zu definieren.

     

    Wenn es aber um mehr Übersichtlichkeit ohne tief verschachtelte if-Abfragen geht, dann könnte man aus den Abfragefeldern einen Code generieren und die select-Anweisungen dann mit einer switch-case-Struktur abbilden. Als Beispiel (Abfragefelder: Name, Ort, Zimmer, Preis):

     

    let me := this;
    let myCode := "";
    myCode := myCode + if Name then "N" else "_" end;
    myCode := myCode + if Ort then "O" else "_" end;
    myCode := myCode + if Zimmer then "Z" else "_" end;
    myCode := myCode + if Preis then "P" else "_" end;
    switch myCode do
       case "N___": (select TABELLE where Name = me.Name)
    case "NO__": (select TABELLE where Name = me.Name and Ort = me.Ort)
    case "NOZ_": (select TABELLE where Name = me.Name and Ort = me.Ort and Preis <= me.Preis)
       [...]
       default: (select TABELLE)
    end

     

    Nur so als Idee.

    • Dan_S
    • vor 3 Jahren
    • Gemeldet - anzeigen

    sehr elegante Lösung!!

    • RMS Immobilière
    • Arsene_Nickels
    • vor 3 Jahren
    • Gemeldet - anzeigen

    @copytexter: danke, sieht zumindest schon strukturierter aus, als 15 verschachtelte If-Anweisungen. Ich hatte auch schon die Idee mit switch, konnte das mit dem Code aber nicht umsetzen. Deinen Vorschlag werde ich gleich mal umsetzen.

    Mir ist klar, das ich die select-Anweisungen alle aufführen muss, aber da mein "Arbeitgeber" schon davon träumt, noch ein 5. Kriterium abzufragen, das wäre dann, glaube ich 25 if's, wäre deine Struktur schon mal viel übersichtlicher und vermutlich auch viel schneller, obwohl ich die Schleifen eh als Server laufen lasse.

    nich mal vielen Dank

    lg

    Arsène

    • Torsten_Stang.1
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Absolut elegant, Copytexter - Chapeau.

     

    Kleiner Hinweis zum Suchen von mir: ich bevorzuge für Suchtexte die Variante

     

    contains(lower(wo),lower(was))

     

    Damit entfällt die Casesensivität und Teilstrings können auch gesucht werden...

     

    Also statt z.B. (select TABELLE where Name = me.Name) dann (select TABELLE where contains(lower(Name),  lower(me.Name))

     

    lg, Torsten

    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Oh, danke für die positive Rückmeldung aus berufenem Munde!

     

    Mit deinem Hinweis auf lower/upper() hast du natürlich völlig recht, Torsten. Das ist absolut sinnvoll. Ich mache das selbst auch immer so. Hier hatte ich es tatsächlich ganz bewusst weggelassen, weil ich den Code auf das Kernproblem reduzieren und möglichst einfach halten wollte. Doch, wirklich! ;)

    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Wobei ich sehe, dass ich bei meinem Code-Beispiel einen Fehler gemacht habe. Bei "NOZ_" müsste man als drittes die Zimmer statt des Preises abfragen. Aber die Grundidee ist ja offenbar auch so deutlich geworden.

    • Dan_S
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Kurze Frage, was passiert, wenn User nur Name und Zimmer sucht ..... würde ich da ein case NZ___ einführen müssen?

    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Dann würde der String von myCode "N_Z_" lauten.

    • RMS Immobilière
    • Arsene_Nickels
    • vor 3 Jahren
    • Gemeldet - anzeigen

    @Torsten: gute Idee mit "contains", werde ich mir merken. Ich habs jetzt mit der Idee von Copytexter realisiert, aber auf die konventionelle Art und natürlich mit "lower", geschätzte 30 Mal, obwohl ich per copy&paste natürlich einiges an Tippen sparen konnte.

    Ihr seid wirklich eine grosse Hilfe!!!

    danke

    lg

    Arsène

Content aside

  • vor 3 JahrenZuletzt aktiv
  • 9Antworten
  • 943Ansichten
  • 1 Folge bereits