Beitrag von hempelr (1976 Beiträge) am Samstag, 1.September.2007, 11:25.
Filterung auf Zahlwert 0 - ohne Leewerte - geht nicht...
Antworten
Beitrag von Sander (8133 Beiträge) am Samstag, 1.September.2007, 11:50.
Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht nicht...
Antworten
Beitrag von hempelr (1976 Beiträge) am Samstag, 1.September.2007, 13:03.
Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht nicht...
hey, danke erst mal, ich bau das mal um, an die Listenschreibweise denkt man immer nicht...
Laufen muss es in Linzenz 2 ( 2.3.12) - werds dann mal ausprobieren, die get umschreiben dürfte das Problem nicht sein.
Achso - muss da bei mehrfachen Bedingungen der Operator (&) mit geschrieben werden oder ist da auch "und" als Voreinstellung - und wie kann man evtl. auch eine "oder" Verknüpfung damit hinbekommen?
Danke für ergänzende Hinweise
Ruben
Antworten
Beitrag von Claus (4645 Beiträge) am Samstag, 1.September.2007, 15:40. WWW: hummelexpress.de
Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht nicht...
Antworten
Beitrag von hempelr (1976 Beiträge) am Sonntag, 2.September.2007, 09:24.
Re: Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht nicht...
Hi Claus,
ja, danke, das kannte ich schon und genau das ist das Problem, BasePortal behandelt die Zahl 0 und Nichts, wie Perl das eben macht, gleich - es meint, es sei nicht vorhanden.
Wenn man also Abfragen macht:
bei
if ($var){ tuwas }
ist die Bedingung erfüllt, wenn der Wert von $var nicht null, 0 oder leer ist
bei
if (!var){ sagdas }
demgegenüber ist die Bedingung eben auch erfüllt, wenn der Zahlwert 0 in dieser Var steht.
Für Variablen mag das noch zur Not angehen, man kann nach meinen Erfahrungen nämlich dann explizit abfragen
if ($var >= 0) { nadannmallos }
wobei offenbar die Perlinterne Typumwandlung greift und es aufgrund dieser Abfragebedingungssyntax (das >= ) folgerichtig erkennt, dass es sich um Zahlen handelt.
Im BasePortal-get jedoch (zumindest bei meiner Lizenz V. 2.3.12) wird das nicht gemacht und ich habe bis jetzt leider keine Möglichkeit gefunden, eine multiple Filterbedingung mit Sortierung so zu setzen.
Das ist schade, und im Moment häng ich da bei einem unterdessen dringenden Projekt etwas ziemlich in der Luft deswegen....
Antworten
Beitrag von Friesecke (245 Beiträge) am Sonntag, 2.September.2007, 17:13.
Re: Re: Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht nicht...
Antworten
Beitrag von Pouraga (1396 Beiträge) am Montag, 3.September.2007, 09:55.
Re: Re: Re: Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht nicht...
Es gibt zwei Arten mit einem Wert umzugehen, man behandelt in als Zahl, Dann ist nichts gleich null oder man behandelt in als Text, dann ist 0 iregend ein Text und "" eben auch ein anderer Text (mit nichts drin).
In Perl macht man das mit den verschiedenen Operatoren ("" >= 0 ist wahr und "" eq "0" ist unwahr)
In Baseportal Datenbanken macht man diese unterscheidung mit der sortierungs Option. Man kann also garnicht abfragen auf leer, weil es von der Indexierung schon kein Unterscheid machen sollte.
Was du also wünschst, währe eine doppelte sortierung nach Zahl UND nach Text. (was etwas kompliziert umzusetzen ist)
Ich versuch mir aber gerade andersherum vorzustellen wo man als Benutzer erwartet, dass es einen Unterschied macht, wenn man in ein reines Zahlenfeld nichts, oder null reinschreibt. (Hiermit bestelle ich " " Äpfel)
Vielicht ist ja eine Checkbox Feld das was du suchst?
Antworten
Beitrag von Friesecke (245 Beiträge) am Montag, 3.September.2007, 13:52.
Re: Re: Re: Re: Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht nicht...
Hallo Pouraga,
meine Antwort bezog sich auf if-Abfragen. Die laufen nicht
über den Index.
Separieren von "" und 0 also z.B. über Index mit var<1 z.B. mit <loop>
und dann innerhalb mit if($feld ne ""){Ausgabe}
Bei Abfragen nach dem Bestand eines Artikels heisst 0, es ist keiner da.
Dagegen heisst "", Bestand ist nicht gezählt, also unbekannt.
Gruß
Friesecke
Antworten
Beitrag von hempelr (1976 Beiträge) am Dienstag, 4.September.2007, 07:48.
Re: Re: Re: Re: Re: Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht nich
Hallo, Friesecke, Hallo, Pouraga,
ja, Friesecke hat es richtig erkannt, ist halt nicht gezählt bzw. in meinem Fall nicht im mathematischen Sinne eineindeutig zuordenbar (weil bei mir 4 Zahlfelder für die eineindeutigkeit vonnöten sind, die dann intern wieder 4 Sortiergruppen ergeben muss das so sein...).
Und genau diese Unterscheidung brauche ich. Allerdings eben auch einen verschachtelten get-while_get_next-Ausdruck, wo je nach Wert in einem Feld nach Ebenennummer und Unterebenennummer sortiert nach Positionsnummern in Abhängigkeit von einer ebefalls numerischen Gruppenzugehörigkeit eine Ausgabe erfolgen soll.
Klar geht das mit if und kombinierten Abfragebedingungen, aber das bedeutet zum einen ein Zwischenspeichern der bspw. nicht eineindeutig zuordenbaren Werte und zum Anderen eine nicht in der gewünschten Reihenfolge stehenden Ausgabe.
Das wiederum wäre ja mit nem Hash zu lösen.
Mir ging es einfach darum, Quelltext zu vereinfachen und möglichst vieles in den gets zu erschlagen, immerhin sind es bis zu 10 ineineander verschachtelte gets, wobei es dann passieren kann, dass in jedem die gesamte Datenbank durchlaufen werden muss falls ein treffender Datensatz für die Bedingung gefunden wird.
Und das kostet Zeit - bei 1000 Datensätzen kann das im "ungünstigsten Fall" allein an die 10 hoch 30 Datenbankdurchläufe bedeuten. Da krirscht der Server schon bei 100 Datensätzen bei entsprechender "Auslegung"...
Trotzdem danke für die Erklärung an beide, da ist das nochmal klarer geworden.
Im Moment stellt es auch kein Problem von der Laufzeit im "real life" dar, weil die Konstellation nur 3fach verschachtelt ist - dann eben mit Abfragen und Zwischenspeichern...
Antworten
Beitrag von Friesecke (245 Beiträge) am Dienstag, 4.September.2007, 09:21.
Re: Re: Re: Re: Re: Re: Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht
Hallo hempelr,
Du kannst Dir eine Routine schaffen, die in einem einmaligen Durchlauf der Datenbanken "" ersetzt durch einen nicht vorkommenden Wert, z.B. 999999
Dann musst Du an anderer Stelle bei der Ausgabe natürlich 999999 durch "" ersetzen.
Friesecke
Antworten
Beitrag von hempelr (1976 Beiträge) am Mittwoch, 5.September.2007, 09:46.
Re: Re: Re: Re: Re: Re: Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht
Hallo, Friesecke,
ja danke, das ist ne Idee...
Die Routine zu globalen Ändern ist ja im DB-Tool (ist glaub ich auch in der Bib drin) schon vorhanden - also kein Problem....
Ist zwar nur ne Krücke, aber auf alle Fälle besesr als nix ;-)
Antworten
Beitrag von Claus (4645 Beiträge) am Dienstag, 4.September.2007, 11:12. WWW: hummelexpress.de
Re: Re: Re: Re: Re: Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht nich
Antworten
Beitrag von Pouraga (1396 Beiträge) am Dienstag, 4.September.2007, 11:18.
Re: Re: Re: Re: Re: Re: Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht
Antworten
Beitrag von Claus (4645 Beiträge) am Dienstag, 4.September.2007, 11:51. WWW: hummelexpress.de
Re: Re: Re: Re: Re: Re: Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht
Antworten
Beitrag von Sander (8133 Beiträge) am Dienstag, 4.September.2007, 12:11.
Re: Re: Re: Re: Re: Re: Re: Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - geht
nich zahlenfeld, sondern sortierung auf zahl. und das schreibt er als "zwingend"
Antworten
Beitrag von Claus (4645 Beiträge) am Dienstag, 4.September.2007, 12:20. WWW: hummelexpress.de
Re: Re: Re: Re: Re: Re: Re: Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - g
und wo ist das Problem?;-)
habe das jetzt auf "sortiert nach Zahl" umgestellt, klappt auch...
Gruß
Claus
Antworten
Beitrag von Sander (8133 Beiträge) am Dienstag, 4.September.2007, 12:25.
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Filterung auf Zahlwert 0 - ohne Leewerte - g
nich so richtig:
0, leer, 6,7,....
Antworten