Je kan lengte met Ubound bepalen, dus zoiets als
var hoogste = arrayx(ubound(arrayx-1))
ofzo
var hoogste = arrayx(ubound(arrayx-1))
ofzo
Dat is niet echt wat ik bedoelde, ik ben bekend met UBound, die geeft je de hoogste index terug van een aaray, ongeacht de inhoud.
Stel dat er nog een "array(10060) = 12" zou zijn, dan wil ik toch die met de hoogste waarde eruit halen en dat is 10034...
Stel dat er nog een "array(10060) = 12" zou zijn, dan wil ik toch die met de hoogste waarde eruit halen en dat is 10034...
jah maar als je dan dit hebt:
array(1) = 4
array(2) = 9
array(3) = 2
met Ubound krijg je dan toch de waarde 3 (de hoogste gedefineerde array) en hij moet waarde 9 (de hoogste waarde in alle arrays) hebben.
array(1) = 4
array(2) = 9
array(3) = 2
met Ubound krijg je dan toch de waarde 3 (de hoogste gedefineerde array) en hij moet waarde 9 (de hoogste waarde in alle arrays) hebben.
Verwijderd
[uit losse pols niet getest mode]
[/uit losse pols niet getest mode]
zoiets kan je toch best zelf verzinnen?
code:
1
2
3
4
5
6
7
8
9
| dim teller,hit,value
hit=lbound(array)
value=array(lbound(array))
for teller = lbound(array) to ubound(array)
if value < array(teller)
hit=teller
value=array(teller)
endif
next |
[/uit losse pols niet getest mode]
zoiets kan je toch best zelf verzinnen?
Sterker nog je _moet_ je hele array doorlopen, anders kan je _geen_ garantie hebben of wat je gebruikt wel echt het maximum is. Want je weet dan tenslotte niet of die andere waarden nou wel of niet groter zijn/waren.Op donderdag 21 maart 2002 17:08 schreef Exterazzo het volgende:
ik denk dat je dan toch je hele array moet doorlopenhoe klote dat ook is
Zoiets had ik idd al wel, maar ik vroeg me af of er niet een simpele functie voor zou zijn, maar die kon ik ook niet googlenOp donderdag 21 maart 2002 17:11 schreef Yarvieh het volgende:
[uit losse pols niet getest mode]
code:
1 2 3 4 5 6 7 8 9dim teller,hit,value hit=lbound(array) value=array(lbound(array)) for teller = lbound(array) to ubound(array) if value < array(teller) hit=teller value=array(teller) endif next
[/uit losse pols niet getest mode]
zoiets kan je toch best zelf verzinnen?
Alleen lijkt me als je een array hebt met een UBound van 15000 oid, dat t niet zo vlotjes zal gaan...
maar thanx anyway
Verwijderd
Aan de andere kant, ik neem aan dat je ook ergens deze array vult. Als je tijdens dat vullen nou bijhoudt wat de hoogste waarde is, kun je die later weer gebruiken...
Verwijderd
Ehh wat had je dan verwacht dat je een functie had die automagish het hoogste getal uit die array zou pikken? die functie zou intern precies het zelfde doen.wellicht ietjes sneller ivb de geinterperteerde wereld van asp maar niet zo heel veel, er moet gewoon door heel die array heen gelopen worden of je wil of niet..
Als je zo extreem veel getallen wilt opslaan en dan er dingen mee wilt doen is een database misschien handiger, alhoewel je daar de kern van het probleem (heel veel checks) niet mee opleest, maar voordeel is dat je in ieder geval op eenvoudige manier van een snel mechanisme gebruik kan maken.
Die mogelijkheid was ik ook aan t overwegen, ik ga denk ik beide opties uitproberen en kijken welke het snelst werkt.Op donderdag 21 maart 2002 17:23 schreef raptorix het volgende:
Als je zo extreem veel getallen wilt opslaan en dan er dingen mee wilt doen is een database misschien handiger, alhoewel je daar de kern van het probleem (heel veel checks) niet mee opleest, maar voordeel is dat je in ieder geval op eenvoudige manier van een snel mechanisme gebruik kan maken.
Is het niet een id om de waardes in die array gewoon gesorteerd te bewaren? Dan kun je simpel de hoogste en de laagste waarde bepalen. Als je vervolgens nog een leuke datastructuur (boom) gebruikt gaat het zoeken ook lekker snel
..
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
[edit]
sorry, hier stond ubound, maar dat was het idee niet... zag ik net..., solly again
sorry, hier stond ubound, maar dat was het idee niet... zag ik net..., solly again
Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.
Verwijderd
Dan krijg je de hoogste index in je array, niet de hoogste waarde.Op donderdag 21 maart 2002 23:00 schreef mOrPhie het volgende:
Gewoon zo:
code:
1 lngHoogsteWaarde = uBound(JouArrayVar)
Dan ist geregeld
Het is onmogelijk om het gesorteerd in een array te stoppen...Op donderdag 21 maart 2002 20:06 schreef Janoz het volgende:
Is het niet een id om de waardes in die array gewoon gesorteerd te bewaren? Dan kun je simpel de hoogste en de laagste waarde bepalen. Als je vervolgens nog een leuke datastructuur (boom) gebruikt gaat het zoeken ook lekker snel..
Het zit namelijk zo: Ik heb een tabel en daar staan per klantorder alle producten.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| TABLE "klantorder_product" id | klantorder_id | product_id | aantal --------------------------------------------- 1 | 10045 | 10031 | 2 2 | 10045 | 10040 | 1 enz. TABLE "klantorder" klantorder_id | klant_id -------------------------- 10045 | 10010 enz. |
nu wordt er dus gekeken naar een product id en aan de hand daarvan bepaald welke klant_id's dat product hebben gekocht. daarna wordt er gekeken welke producten die klanten kochten behalve dit product... Vervolgens worden de totalen (van aantal) bepaald per product en het product met het hoogste totaal moet ik hebben.
duidelijk?
Ik heb t nu dus op 2 manieren gedaan:
- Via een paar arrays, wat er op neer komt dat de laatste array er uit zal zien als in mijn eerste post geillustreerd.
- Via een array en daarna een tijdelijke tabel.
De laatste is af en toe een tikkeltje sneller, maar het scheelt niet echt veel van elkaar.
Ehh is het niet een idee om gewoon een query los te laten op je tabel ipv in je array te gaan kloten?
Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR
Ok ik zal uitleggen hoe ik het nu doe en daarna mag iemand me uitleggen hoe dat in 1 query gepropt kan worden...
Zo nu hebben we een tabel met product_id en totaal, die makkelijk gequeried kan worden op MAX of ORDER BY,etc.
Knappe jongen die dit in een query kan stoppen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| 'eerste query, klant_order_id's ophalen voor orders met hetzelfde product_id
SELECT DISTINCT klant_order_id FROM kt_Klant_Order_Product WHERE product_id=" & product_id " ORDER BY klant_order_id
'hieruit wordt de volgende string gebouwd:
sql_temp = " FROM kt_Klant_Order_Product WHERE product_id<>" & product_id & " AND ("
temp_counter = 1
do while not recordset.EOF
if temp_counter = 1 then
sql_temp = sql_temp & "klant_order_id=" & recordset("klant_order_id")
else
sql_temp = sql_temp & " OR klant_order_id=" & recordset("klant_order_id")
end if
temp_counter = temp_counter + 1
recordset.MoveNext
loop
recordset.close
sql_temp = sql_temp & ")"
'tweede/derde, product_id's ophalen waar voorgaande gevonden klant_order_id's aan voldoen
"SELECT COUNT(*)" & sql_temp
redim product_array(recordset)
"SELECT DISTINCT product_id" & sql_temp & " ORDER BY product_id"
'product_array wordt gevuld
temp_counter = 1
do while not recordset.EOF
product_array(temp_counter) = recordset("product_id")
temp_counter = temp_counter + 1
recordset.MoveNext
loop
recordset.close
'nu gaan we een tijdelijke table creeeren (met mooi gegenereerde unieke naam:
dim temp_table,Tools
Set Tools = Server.CreateObject("MSWC.Tools")
temp_table = "temp_" & (Abs(Tools.Random)*CLng(Replace(CStr(Timer),",","")))
"CREATE TABLE " & temp_table & "(product_id int PRIMARY KEY, totaal int)"
for temp_counter = 1 to UBound(product_array)
"SELECT SUM(aantal) AS aantal FROM kt_Klant_Order_Product WHERE product_id=" & product_array(temp_counter)
"INSERT INTO " & temp_table & " VALUES(" & product_array(temp_counter) & "," & recordset("aantal") & ")"
recordset.close
next |
Zo nu hebben we een tabel met product_id en totaal, die makkelijk gequeried kan worden op MAX of ORDER BY,etc.
Knappe jongen die dit in een query kan stoppen
Stored procedure?Op vrijdag 22 maart 2002 13:17 schreef Dope-E het volgende:
Knappe jongen die dit in een query kan stoppen
Exact expert nodig?
Hmmm ja is ook een idee natuurlijk!Op vrijdag 22 maart 2002 13:53 schreef Crazy_D het volgende:
Stored procedure?
Heb er alleen geen ervaring mee, dat wordt dus hoog tijd dan
Back to work
Nou ik heb ff rondgeneusd hier en daar, maar over het algemeen wordt er gedacht dat als je zo'n zooi aan variabelen hebt het sowieso nauwelijks performancewinst kan opleveren door stored procedures.
En verder heb ik nergens duidelijk kunnen vinden hoe je voor zoveel queries een (of meerdere) procedures zou moeten bouwen. want de ene query wordt natuurlijk weer opgebouwd uit t resultaat van de andere...
Ik denk dat ik t zo maar laat, heeft al genoeg tijd gekost zo
En verder heb ik nergens duidelijk kunnen vinden hoe je voor zoveel queries een (of meerdere) procedures zou moeten bouwen. want de ene query wordt natuurlijk weer opgebouwd uit t resultaat van de andere...
Ik denk dat ik t zo maar laat, heeft al genoeg tijd gekost zo
Weet ik niet, maar als je uiteindelijk een stored proc bakt die een mooie recordset teruggeeft met precies hetgeen wat je wilt, is het in ieder geval wel stoerOp vrijdag 22 maart 2002 14:58 schreef Dope-E het volgende:
Nou ik heb ff rondgeneusd hier en daar, maar over het algemeen wordt er gedacht dat als je zo'n zooi aan variabelen hebt het sowieso nauwelijks performancewinst kan opleveren door stored procedures.
Cursor... dat kun je zien (of misschien is het wel hetzelfde...) als een recordset.En verder heb ik nergens duidelijk kunnen vinden hoe je voor zoveel queries een (of meerdere) procedures zou moeten bouwen. want de ene query wordt natuurlijk weer opgebouwd uit t resultaat van de andere...
Ik denk dat ik t zo maar laat, heeft al genoeg tijd gekost zo
Exact expert nodig?
Pagina: 1