0

Text und numerischer Wert gleichzeitig in einer IF-Abfrage

Hallo

ich habe in einer Search-Engine einige Suchfelder, zB Name, Ort, aber auch Minimumpreis und Maximumpreis und Anzahl Zimmern (es geht um Immobilien), die in einer Ansicht angezeigt werden sollen.

Wenn ich jetzt einzelne Felder abfrage, klappt die Ansicht tadellos. Auch wenn ich Textfelder kombiniere (zB Name und Ort) gibt es kein Problem. Einzeln den Preis zwischen Min und Maxpreis abfragen geht auch, wenn ich aber Name und/oder Ort mit der Preisabfrage kombiniere, scheitert es vermutlich daran, dass in den if then else-Gebilde ja bekanntlich Texte und numerische Werte nicht gleichzeitig abgefragt werden können (übrigens ohne Fehlermeldung, aber die Ansicht bleibt leer).

das wäre in etwa 

if this.Name != null and this.Maximumpreis != null then

select Immobilientabelle where Name = this.Name and this.Minpreis < Preis < this.Maxpreis

Gibt es da einen Trick?

 

danke im Voraus für Input

Arsène

9 Antworten

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

    Hallo Arsène, wenn sich 'Name' und 'Maximumpreis' im selben Datensatz befinden, ist das "this" überflüssig. Ich würde die Werte statt dessen für die select-Abfrage in eine Variable übertragen. Das "!= null" kann man auch weglassen. Versuch's mal so:

    if Name and Maximumpreis then
        let myName := Name;
        let myMaxi := Maximumpreis;
        select Immobilientabelle where Name = myName and Minpreis <= myMaxi
    end

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

    Danke. this hatte ich nur als Beispiel angeführt, ich habe select-Anweisungen und Tabellenname in Variablen gespeichert, wollte aber hier nicht meine ganze Formeln mit unzähligen Verschachtelungen posten.

    Dein Ansatz ist interessant, werde ich mal ausprobieren. Dass man !=null weglassen kann, wusste ich nicht.

    Wieder mal nicht umsonst aufgestanden ;-)

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

    Na ja, ich habe mich halt an deinem Beispiel-Code orientiert. Und "this" funktioniert in select-Abfragen grundsätzlich nicht. Man kann "this" aber vorher in eine Variable schreiben und diese dann in der Abfrage nutzen. So müsste es also auch funktionieren:

     

    if Name and Maximumpreis then
        let me := this;
    select Immobilientabelle where Name = me.Name and Minpreis < me.Maximumpreis
    end

    Und was die if-Abfrage betrifft: Man kann schon verschiedene Datentypen abfragen, nicht jedoch zurückgeben lassen. Sowas bspw. würde nicht funktionieren:

     

    let myVariable := if Zahl and Text then Zahl else Text end

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

    Ja, so ähnlich habe ich mir das vorgestellt. Nichmel vielen Dank.

    Eine andere Frage: man kann Auswahlfelder (Drop-down) ja nicht automatisch "bestücken". Da die Mastertabelle über 30 Wohnanlagen umfasst mit je 10 bis 30 Wohnungen und sich ständig ändert, wäre ein manuelle Bestücken zu aufwändig

    Also wollte ich als Gedächtnisstütze eine Ansicht daneben posten mit einem einzigen Feld, das nur den Namen zB der Wohnanlagen anzeigt. Nun habe ich also mehrere Wohnungen in einer Wohnanlage und entsprechend oft den gleichen Namen, möchte aber den Namen der Wohnanlage nur einmal erscheinen lassen. Wie kann ich das ausfiltern?

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

    Bei einer Ansicht wüsste ich jetzt so auf Anhieb nicht, wie man da Mehrfacheinträge vermeiden könnte. Für eine einfache Liste der Wohnanlagen könnte man aber auch ein Berechnungsfeld nutzen. Die Einträge könnte man entweder nebeneinander anzeigen lassen (Feld 'Wohnanlage' hier beispielhaft für die Bezeichnung):

     

    concat(unique((select Immobilientabelle).Wohnanlage))

     

    Oder untereinander:

     

    join(unique((select Immobilientabelle).Wohnanlage), "
    ")

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

    Nebenbei: Wie sieht denn das Datenmodell aus? Ich interpretiere deine Problembeschreibung so, als gäbe es nur eine Tabelle für Wohnungen, zu der dann jedes mal die Wohnanlage eingetragen wird. Falls dem so sein sollte: Es wäre wahrscheinlich deutlich effektiver, die Wohnanlagen in eine Tabelle zu packen und die Wohnungen in eine Untertabelle. Nur so als Anregung.

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

    Danke nochmals für den Tipp. Mit "join" habe ich nicht gearbeitet, das werde ich jetzt nachholen.

    Dein Denkanstoss ist gut, würde mir aber ziemlich viel Arbeit machen, weil ich die Rohdaten aus einer Excel-Datei extrahieren muss und sie dann manuell auf 2 Tabellen aufsplitten müsste. Bei über 300 Einträge wäre das eine nette Beschäftigung ;-)

    Und es gibt eigentlich 2 Tabellen: eine für Wohnanlagen und eine für Neubausiedlungen mit Grundstücken und Häusern. Da hätte ich dann nochmal das gleiche Problem. Und ich muss die Daten quasi übers Wochenende einpflegen, so dass man dann einem Montag Excel vergisst und mit Ninox mit den gleichen Daten weiter arbeiten kann. Im Moment arbeite ich mit alten Datensätzen zum Programmieren.

    Beide dienen dann auch noch als Basis für Kommisionsrechnungen und -Berechnungen. Da wird auch noch eine Kundentabelle, eine Vermittlertabelle, eine Rechnungstabelle und jede Menge statistische Berechnungen hinzukommen. Für letztere ist eine Datenbank ja prädestiniert, ein wichtiger Grund, um von Excel auf Datenbank umzuschwenken.

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

    Ich kenne die Datenstruktur natürlich nicht, aber das Aufsplitten auf zwei Tabellen und deren Verknüpfung würde man eventuell ja auch automatisieren können. Das Ergebnis wäre jedenfalls deutlich mehr Datenbank-like als mit den "Workarounds" da oben. Ich wollte dir aber keineswegs reinreden, es war mir nur aufgefallen, dass da wohl noch Optimierungspotenzial ist. ;)

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

    Nachdem das meine erste Datenbank ist (wie gesagt, fühle ich mich mir Excel-Makros heimisch) bin ich dankbar für jeden Tipp.:-)

    ich werde mir deine Anregung auf jeden Fall durch den Kopf gehen lassen.

Content aside

  • vor 3 JahrenZuletzt aktiv
  • 9Antworten
  • 1157Ansichten