Domino 9 und frühere Versionen > ND8: Entwicklung
"Zwischen x und y" Suche
tabama:
Hallo,
ich habe keinen (bzw. nur einen aufwendigen) Plan, wie ich folgende Aufgabe umsetzen kann:
Es existieren Dokumente mit einem Feld "von" und einem Feld "Bis"
Beispiel:
Dokument von bis
1 23 59
2 70 70
3 85 91
Hinweis: Eine Mehrfachnennung/Übereschneidung ist nicht möglich.
Die Aufgabe ist nun, bei Eingabe einer Zahl das Dokument zu finden, welches den Bereich der Zahl beinhaltet. Z.B. sollte "40" das Dokument 1 zurück liefern.
Meine Aufwendige Lösung:
Ich "scanne" die Dokumente alle durch und prüfe bei jeden Dokument, ob die eingegebne Zahl zwischen den zwei Werten liegt. Ich stelle mir nur vor, dass das bei einer größeren Datenmenge nicht gerade performant ist.
Hat jemand einen Ansatz?
pram:
Hast du mal versucht, was passiert, wenn du die Dokumente in einer Ansicht nach "von" sortierst (Wert numerisch) und mit getDocumentByKey suchst?
ExactMatch sollte dann FALSE sein
Die Hilfe bezieht sich zwar hier auf Strings:
If you specify False (the default) or omit this parameter, a partial match succeeds. A partial match returns the first document that matches the initial characters of the key.
Ich meine mich aber zu erinnern, dass bei Zahlen das nächstbeste gefunden wird.
Über die C-Api geht es bestimmt ;)
http://www-12.lotus.com/ldd/doc/domino_notes/8.5.3/api853ref.nsf/d1891c614adc986885256231005305d5/0021002a007900e6852564cd006e9d65?OpenDocument
Gruß
Roland
tabama:
Hallo Roland,
hatte ich auch schon dran gedacht, aber das nächste Dokument (in meinem Beispiel die Nr. 2) wäre ja falsch. Den 40 ist ja nicht zwischen 70 und 70.
Mit dem C und API's habe ich (noch) keine Ahnung.
Dennoch Danke schon mal.
Glombi:
Holzhammer Methode 1 ohne Dokumente anzufassen, daher performanter:
Du kannst eine Ansicht erstellen, die in der ersten Spalte nach <von> und <bis> sortiert ist.
Dann iteriert Du solange mit dem jeweils um 1 inkrementierten Startwert bis Du einen Treffer hast.
In Deinem Beispiel Startwert 40 hättest du den Treffer bei bis = 59.
Problem: Was ist, wenn der Wert nicht vorkommt? Kann ja sein, dass Du nach 92 suchst!
Das müsste man dann intelligent limitieren.
Andreas
Glombi:
Methode 2:
call db.Search(searchstring, 0, nothing)
anwenden. Das würde ich persönlich vorziehen.
searchstring = |von <= | & startwert & |bis >= | & startwert
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln