Seite 1 von 1

Index mit boolean [erledigt]

Verfasst: Fr, 23. Jan 2015 12:28
von peternmb
Hallo irgendwie stehe ich auf dem Schlauch,

ich möchte einen Index auf Name und ein Boolean-Feld erstellen - ging das nicht irgendwie???

Beispieldatenbank:
Name Z 30
Mitglied L 1

Index on name + mitglied to xy

Re: Index mit boolean

Verfasst: Fr, 23. Jan 2015 12:46
von brandelh
Hi,

wenn man mehrere Felder in einem Index kobinieren will, muss man einen String bilden, der IMMER GLEICH LANG IST !

Code: Alles auswählen

INDEX ON field->NAME + iif(field->Mitglied,"J","N") TO xyz
das wäre ein gültiger Ausdruck, der deinem Beispiel entspricht, ich frage mich allerdings, ob er sinnvoll ist !
Sortiert wird hier nach dem Namen, und nur wenn dieser gleich ist zusätzlich nach der Eigenschaft Mitglied.

Code: Alles auswählen

INDEX ON iif(field->Mitglied,"J","N") + field->NAME TO xyz
so könnte man schnell nach Mitgliedern und Nichtmitgliedern (warum nimmt man solche in der Datenbank auf ?) sortieren ;-)

Re: Index mit boolean

Verfasst: Fr, 23. Jan 2015 12:55
von peternmb
ja Danke, genau das habe ich gesucht :blob8:

Das mit dem Mitglied war nur ein Beispiel, das natürlich nur Sinn machen würde wenn zuerst nach dem Feld Mitglied, dann nach dem Namen sortiert werden würde, so dass erst die Mitglieder alphabetisch, dann die Nichtmitglieder alphabetisch kämen...

Re: Index mit boolean

Verfasst: Fr, 23. Jan 2015 13:23
von Tom
Womit Du über diesen Index (IF(mitglied,"J","N")+NAME) allerdings nicht mehr direkt nach Mitgliedsnamen suchen könntest. Es wäre ein zusätzlicher Index erforderlich - oder OrdWildSeek().

Re: Index mit boolean

Verfasst: Fr, 23. Jan 2015 13:31
von peternmb
Hallo,

ja, das ist mir klar.
Es geht auch nicht um die Suche sondern nur um die Reihenfolge bei einer Reportausgabe.

Re: Index mit boolean

Verfasst: Fr, 23. Jan 2015 13:35
von Tom
Es geht auch nicht um die Suche sondern nur um die Reihenfolge bei einer Reportausgabe.
Da kann man sehr leicht fast jede denkbare Sortierung ermöglichen, indem man die Daten in ein Array einliest, als Browse anzeigt und dort verschiedene Kritierien über ASort() anbietet.

Code: Alles auswählen

* Mitglied .T./.F. in Spalte 1, Name in Spalte 2:
aSort(aMitglieder,,,{|aY1,aY2|JaNein(aY1[1])+aY1[2] > JaNein(aY2[1])+aY2[2]})
* drucken

FUNCTION JaNein(lVal)
RETURN IF(lVal,"J","N")

Re: Index mit boolean

Verfasst: Fr, 23. Jan 2015 14:01
von brandelh
Unter Clipper habe ich auch wegen der Suche und Anzeigesortierung Indexdateien angelegt, aber da unter Xbase++ praktisch keine relevante Größenbegrenzung gegeben ist,
ist es viel einfacher die Ergebnisse wie TOM schreibt in Arrays zwischen zu lagern und je nach Bedarf zu sortieren. So kann man auch aus einer Abfrage heraus die Anzahl der Treffer / Seiten ermitteln und ab einer gewissen Anzahl eine Warnung ausgeben "Achtung, 200 Seiten gefunden, sollen die wirklich gedruckt werden ? " ;-)

PS: Wenn man die Sortierung mit SetOrder(0) ausschaltet und die Datei z.B. auch mit Filter komplett nach komplexen Suchkriterien durchsucht, geht das auf aktueller Hardware wegen dem CACHE der Platten recht schnell, dann das Ergebnis in ein Array und alles sortieren. Das kann deutlich schneller sein als die Einzelsatzsuche, wenn der führende Index nicht gleich viele Sätz ausschließen kann.
Auf jeden Fall belasten zusätzliche Indexdateien insbesonder im konkurierenden Netzwerkbetrieb schon enorm, da diese ja immer mitgepflegt werden müssen.

Re: Index mit boolean

Verfasst: Fr, 23. Jan 2015 14:07
von peternmb
Vielen Dank für die Hinweise.

Ja, ich arbeite auch lieber mit Arrays - ich habe aber Probleme, Arrays an FRAX zu übergeben.
Das geht über eine kleine temporäre Datenbank (zumindest für mich) einfacher und für mich schneller.

Da es nur einige hundert Datensätze sind spielt das auch keine allzugroße Rolle.

Re: Index mit boolean

Verfasst: Fr, 23. Jan 2015 14:09
von brandelh
Das Ergebnisarray kann man sehr leicht und schnell in der richtigen Sortierung erstellen - speziell für Frax, wenn man mit den Dateinamen nicht durcheinander kommt ;-)

Re: Index mit boolean

Verfasst: Fr, 23. Jan 2015 14:23
von Tom
Notfalls kannst Du das sortierte Array ja auch wieder in einer temporären Tabelle ablegen, die, wenn sie keinen Index besitzt, die Sortierung des Arrays hätte. Und nach dem Drucken wird sie eben gelöscht.

Re: Index mit boolean

Verfasst: Fr, 23. Jan 2015 14:53
von brandelh
BRANDELH hat geschrieben:Das Ergebnisarray kann man sehr leicht und schnell in der richtigen Sortierung erstellen - speziell für Frax, wenn man mit den Dateinamen nicht durcheinander kommt ;-)
Tom hat geschrieben:Notfalls kannst Du das sortierte Array ja auch wieder in einer temporären Tabelle ablegen, die, wenn sie keinen Index besitzt, die Sortierung des Arrays hätte. Und nach dem Drucken wird sie eben gelöscht.
Eigentlich wollte ich genau das schreiben ... aber irgendwie ist die Hauptsache bei meiner Beschreibung unter gegangen, nämlich dass aus dem Array eine passende DBF werden soll.
Ich mach wohl besser Feierabend für heute ... :roll: