webForumDet fria alternativet

Jämföra utloopade priser med det billigaste

ASP

15 svar · 645 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Frågan#1

Hej!

Jag loopar ut priser på en artikel från olika leverantörer enligt:

Leverantör E-nummer Pris Avtalspris Rabatt Kategori Välj 
Storel 1832821 207,00 kr 64,17 kr 69% Eljo Övrig materiel  
Solar 1832821 206,00 kr 74,16 kr 64% ELJO STD.  
Ahlsell 1832821 202,00 kr 74,74 kr 63% ELJO STRÖMST,TIMRAR,SYST VIP90  
Elektroskandia 1832821 198,00 kr 75,24 kr 62% ELJO AQUA  
Selga 1832821 195,00 kr 78,00 kr 60% Strömställarsystem Eljo

Med följande kod

If objRS.EOF then %>
	<span>Det fanns inga artiklar</span>
<% Else%>
	<table>
		<caption>S&ouml;kresultat</caption>
			<thead>
				<tr>
					<th>Leverantör</th>
					<th>E-nummer</th>
					<th>Pris</th>
					<th>Avtalspris</th>
					<th>Rabatt</th>
					<th>Kategori</th>
					<th>Välj</th>
				</tr>
			</thead>
			<tbody>
			<% Do until ObjRS.EOF 
			'Bakgrundsfärg
			'*************
			If bgcolor = "#FFFFFF" then bgcolor = "#EFEFEF" else bgcolor = "#FFFFFF"
			%>
				<tr onMouseOver="this.style.backgroundColor='#D3DEF8';" onMouseOut="this.style.backgroundColor='';" bgcolor=<% =bgcolor %>>
					<td><% =objRS("supplierName") %></td>
					<td><% =objRS("articleNumber") %></td>
					<td><% =formatCurrency(objRS("articlePrice")) %></td>
					<td><% =formatCurrency(objRS("articlePriceWithDiscount")) %></td>
					<td><% =objRS("articlediscount") %>%</td>
					<td><% =objRS("categoryName") %></td>
					<td><input name="" type="checkbox" value="" /></td>
				</tr>
				<% 
			objRS.Movenext 
			Loop 
			%>
			</tbody>
	</table>
<% 
End If

Funkar ju finfint...

Men jag skulle vilja lägga till en funktion... Jämföra alla priser med det billigaste enligt bifogad bild...

Hur kan man göra det?

Mvh
Henrik

Capture_35.jpg
Medlem sedan dec. 19996 721 inlägg
#2

Den informationen plockar vi ut i SQL-frågan, så det vore fint att få se den. Vilken DBMS?

Medlem sedan jan. 20013 582 inlägg
#3

Hej!

Misstänkte att det kunde vara så..

DBMS: SQL-Server

SQL-fråga:

SELECT tblArticle.articlenumber, tblArticle.articleName, tblPrice.articlePrice,
 tblPrice.articleCategoryNumber, tblArticle.articleUnit, tblCategory.CategoryName, 
tblCategory.categoryNumber, tblDiscount.articleDiscount, tblSupplier.SupplierName, 
CASE WHEN articleDiscount is null 
THEN articlePrice ELSE articlePrice*(1-([articleDiscount]*0.01)) END 
AS articlePriceWithDiscount 
FROM tblArticle 
INNER JOIN tblPrice ON tblArticle.articlenumber = tblPrice.articleNumber 
INNER JOIN tblSupplier ON tblPrice.articleSupplierId = tblSupplier.SupplierId 
LEFT OUTER JOIN tblDiscount ON tblPrice.articleCategoryNumber = tblDiscount.categoryNumber 
AND tblPrice.articleSupplierId = tblDiscount.supplierId 
LEFT OUTER JOIN tblCategory ON tblPrice.articleSupplierId = tblCategory.supplierId 
AND tblPrice.articleCategoryNumber = tblCategory.categoryNumber 
WHERE tblArticle.articleName = 'EKLK 3G1,5 R50' AND tblSupplier.supplierId IN (4, 3, 5, 1, 2) 
ORDER BY articlePriceWithDiscount

Mvh
Henrik

Medlem sedan juni 200032 967 inlägg
#4

till att börja med (när sql-frågan är fixad så den verkligen bara returnerar två poster), hade jag lagt till en markering på vilken post som är vilken, princip:

select bla, bla, bla, 'LowestPrice' as pricetype....
union all
select bla, bla, bla, 'HighestPrice' ....

Sedan kollar du bara i asp-koden vad fältet pricetype i recordsetet innehåller.

edit: eller har detta inte att göra med din tråd i SQL-forumet?
*snurrig*

mvh

Medlem sedan jan. 20013 582 inlägg
#5

:)
Nä, de har inte med varandra att göra.....

Mvh
Henrik

Medlem sedan juni 200032 967 inlägg
#6

ok.

Eftersom du sorterar på pris borde ju billigast komma överst och dyrast underst.
Släng in en räknare som räknar upp i loopen, position 1 är billigast och den sista är dyrast. För att se vilken som är sist, kan du jämföra med recordcount (om du öppnar recordsetet på ett sätt som ger dig den egenskapen).

(edit: om du ens behöver veta vilken som är sist då. det behöver du kanske inte? Då är det väl kakbit? :) )

mvh

Medlem sedan jan. 20013 582 inlägg
#7

Hmmm, nu fattar jag ingenting.... :)

Hur ska jag kunna jämföra priserna inbördes på det sättet, och presentera det i procent?

Mvh
Henrik

Medlem sedan juni 200032 967 inlägg
#8
i = 0
while not foo.eof
     i = i+1
     if i = 1 then
          ' detta är det lägsta priset, spara undan i en variabel
          dLowestPrice = cdbl(foo("prisfältet"))
     end if
     ...
wend
...

Resten är ju bara matematik...

Medlem sedan dec. 19996 721 inlägg
#9

Med tanke på att det var en rätt komplex sökning så tycker jag nog att @nders variant är bättre än att låta databasen beräkna.

Medlem sedan jan. 20013 582 inlägg
#10

@nders lösning är finfin....

Håller på att fixa med den just nu... :)

Mvh
henrik

Medlem sedan jan. 20013 582 inlägg
#11

Tror jag fått till det.. :)

Men jag är lite osäker på beräkningen...

dLowestPrice är det lägsta priset som artikeln har. Detta värde är "fast"
dArticleWithDiscount är det variabla värdet som som loopas ut och jämförs

formatNumber((1 - (dLowestPrice/dArticlePriceWithDiscount))*100, 1)

Känns inte helt rätt....

Särskillt det sista värdet i den bifogade dumpen..

Mvh
henrik

Capture_35.jpg
Medlem sedan jan. 20013 582 inlägg
#12

Testade även:

formatnumber((((dArticlePriceWithDiscount-dLowestPrice)/dArticlePriceWithDiscount)*100), 1)

med samma resultat...

om det lägsta priset är 4,44 och det sedan jämförs med 40,25, kan väl inte det senare vara 89% högre... Det är ju nästan 10 ggr så högt..

Mvh
henrik

Medlem sedan dec. 19996 721 inlägg
#13

(dArticlePriceWithDiscount/dLowestPrice-1)*100

Medlem sedan jan. 20013 582 inlägg
#14

@nders skrev:

Resten är ju bara matematik...

Hmm det var det där med matten.. ;) Nu funkar det fint i a f..

Tackar!

Mvh
Henrik

Medlem sedan jan. 20013 582 inlägg
#15

Hepp!

Anders finfina kod plockar ju ut det lägsta priset jenom att kontrollera när räknaren = 1

i = 1

Kan man på något sätt få ut det högsta priset genom att kontrollera när räknaren har det högsta värdet. Typ:

i = "högst värde"

Edit//
Hmm det verkar som @nders förklarar det i ett inlägg längre upp. Hur jämför jag med recordcount?

http://www.webforum.nu/showthread.php?p=1197175#post1197175

Mvh
Henrik

Medlem sedan juni 200032 967 inlägg
#16

Du kan ju börja med

objRS.Move objRS.RecordCount - 1
dHighestPrice = objRS("price")
objRS.MoveFirst
while not objRS.EOF
     ' etc

Då måste du se till att ditt recordset inte är forward-only.

mvh

257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)