webForumDet fria alternativet

Sortera!

ASPur ASP

17 svar · 460 visningar · startad av annesophie

Medlem sedan juni 20012 236 inlägg
Frågan#1

Håller på med en produktlista över elektroniska mojänger.

En av produktserierna som listas ser tex ut som följande:

PX100 Series 80-124 W
PX25 Series 20-29 W
PX45 Series 30-54 W
PX65 Series 55-79 W

Jag vill att dom listas i ordning efter namn, men även efter storlek. Som ni ser så ligger PX100 före tex PX25 vilket då inte stämmer. Eftersom PX100 har högre W än PX25 så borde den ligga sist...så här:

PX25 Series 20-29 W
PX45 Series 30-54 W
PX65 Series 55-79 W
PX100 Series 80-124 W

...men jag får bara inte ihop en bra ORDER BY som gör vad jag vill! Jag vet ju typ vad felet är men inte hur jag ska lösa det...

subcat = rs4("subcategory_id")
sql5 = "SELECT * FROM products where productGroup="&group&" and caseStyle= "&subcat&" order by product,powerclass;"
set rs5 = conn.execute(sql5)

Exempel på tabell:
product = PX25 Series
powerclass = 20-29 W

Hjälp någon...

/A

Medlem sedan dec. 19995 875 inlägg
#2

Strängar är vänsterjusterat, tal är högerjusterat, inte alls konstigt att den sorterar som den gör. 1 är ju mindre än 2 och 2 är mindre än 4 osv...

Medlem sedan jan. 20021 122 inlägg
#3

/r Det blev fel, det här fungerar inte alls

Medlem sedan juni 20012 236 inlägg
#4

Pettson:

Nae jag vet att det inte funkar... :(

Brimba:

Jo men goddag yxskaft! :) Jag vet ju att det inte fungerar, anledningen till att man startar en trad ar ju oftast att man behover hjalp. Jag vet ju inte hur jag ska gora och hoppades darfor att nagon hade ett forslag.

Jag kommer liksom inte undan upplagget pa tabellen, utan maste arbeta med den.

Medlem sedan dec. 200012 464 inlägg
#5

Ser alla namn lika ut? Dvs med två tecken först följt av siffror

I så fall så borde du kunna göra så här

order by cast(substring(product,3,len(product)-2)) as int)

Exakt hur det ser beror på vilken dbms du använder. Ovanstående fungerar i SQL server, om du har access så

order by cint(mid(product,3))
Medlem sedan jan. 20021 122 inlägg
#6

är inte helt bäst i ASP (än , jag jobbar på det... :e ), men det bästa jag kan komma på är att göra två recset, och sedan joina dem. typ

dim textattvisa(2)
subcat = rs4("subcategory_id")
sql5 = "SELECT * FROM products where productGroup="&group&" and caseStyle= "&subcat&" order by product"
set rs5 = conn.execute(sql5)
sql6 = "SELECT * FROM products where productGroup="&group&" and caseStyle= "&subcat&" order by powerclass desc"
set rs6 = conn.execute(sql6)

textattvisa(0)=rs5
textattvisa(1)=rs6
text=join(textattvisa, "")

response.write text

Somj sagt var inte smidigast i världen, men det kan fungera...
/r LarsG hann visst svara innan jag blev klar, använd hans, för han vet vad han gör... ;)

Medlem sedan juni 20012 236 inlägg
#7

Njae Lars,

Alla produktnamn ser inte likadana ut. Tyvarr!

Exempel fran listan:

PX25
PX45
PX65
LPU
LPT
PCU100
PCU150
PCU200
DT25 & 75

Foretaget anvander ACCESS som databas.

Nagra fler forslag...*hoppas*

/A

Medlem sedan jan. 20021 122 inlägg
#8

men om man har en kolumn som innehåller ett värde som visar, hur, och om man ska "klippa". Hoppas du förstår...

order by cint(mid(product," & infoomuppbyggnad & " ))

/r typ på PX65 Series 55-79 W så innehåller värdet kanske 3 men på en annan 0 osv.

Medlem sedan maj 20018 027 inlägg
#9

Jag kan föreställa mig att en variant på LarsG:s förslag kan funka.

order by substring(product, 1, 2), cast(substring(powerclass,1,2) as int)

Då borde den sortera i första hand på alla PX, LP, PC osv. Därefter, inom dessa grupper borde den sortera på första talet i effektklasserna. Kan gå fel om en del effektklasser börjar på tresiffriga tal. Kanske går om man typecastar en treteckenssträng. Frågan är hur det går när den är "80-". Det kanske blir 80? I så fall borde det gå bra.

Medlem sedan dec. 200012 464 inlägg
#10

Det är ju några tveksamma fall. Hur skall dom helt utan siffror sorteras? Hur skall DT25 & 75 hanteras?

order by 100000.0*iif(mid(product,1,1) between '0' and '9', asc(mid(product,1,1))-asc('0'),0) +
         10000.0*iif(mid(product,2,1) between '0' and '9', asc(mid(product,2,1))-asc('0'),0) +
         1000.0*iif(mid(product,3,1) between '0' and '9', asc(mid(product,3,1))-asc('0'),0) +
         100.0*iif(mid(product,4,1) between '0' and '9', asc(mid(product,4,1))-asc('0'),0) +
         10.0*iif(mid(product,5,1) between '0' and '9', asc(mid(product,5,1))-asc('0'),0) +
         1.0*iif(mid(product,6,1) between '0' and '9', asc(mid(product,6,1))-asc('0'),0)
 / iif(mid(product,1,1) between '0' and '9',1.0,
   iif(mid(product,2,1) between '0' and '9',10.0,
   iif(mid(product,3,1) between '0' and '9',100.0,
   iif(mid(product,4,1) between '0' and '9',1000.0,
   iif(mid(product,5,1) between '0' and '9',10000.0,
   iif(mid(product,6,1) between '0' and '9',100000.0))))))

Om det är fler tecken så går det att modifiera. Det kanske fungerar som en engångslösning, men på sikt så borde man försöka lagra ett sorteringsbegrepp som en egen kolumn.

Medlem sedan jan. 20021 122 inlägg
#11

oj! :o
Du skulle inte kunna berätta hur det där fungerar? :OO

Medlem sedan juni 20012 236 inlägg
#12

Jösses Lars! :) Sicken grej!

Men jag måste nog instämma med Pettsson. Hur funkar det här. Du är ju det närmaste en ASP guru man kommer och jag är bara en novis... Hur ska jag implementera detta med min select? :q

Förresten...

Det är ju några tveksamma fall. Hur skall dom helt utan siffror sorteras? Hur skall DT25 & 75 hanteras?

Jag VET! :( Jag gör mitt bästa att göra om så mycket jag kan men det rör sig om 10 000 produkter...inget jag kan byta namn på. Tyvärr....*suuuuuuuck*

I första hand gäller ju alltid bokstavsordning, men då det finns flera i en serie så är det viktigt att dom ligger rätt enligt Watt.

Medlem sedan dec. 200012 464 inlägg
#13

Jag kom just på att det inte fungerar. Jag skall fundera lite mer

Medlem sedan maj 20018 027 inlägg
#14

Går det verkligen inte att sortera med avseende på två kolumner som jag föreslog lite högre upp? Alltså både map "product" och map "powerclass"? Det funkar i Oracle i alla fall. Det kanske inte går i Access?

Medlem sedan dec. 200012 464 inlägg
#15

UlfT:

Jodå, visst går det att sortera med avseende på flera kolumner i Access. Problemet är att ditt förslag bara tar hänsyn till 2 siffror

om powerclass innehåller

20 W
189 W

så blir sorteringen

189 W
20 W

med diitt förslag

Det är samma problem med mitt förslag. På något sätt måste man räkna fram hur många siffror som ingår. Även om man kan det så är det problem med sådana som

20 - 29 W

Medlem sedan maj 200010 687 inlägg
#16

Finns det inte någon funktion liknande VBScripts String?
Då skulle man kunna slänga på nollor framför strängen just i order-klausulen... :)

Medlem sedan maj 200010 687 inlägg
#17

Nåt sånt här gjorde jag på en oerhört gammal pryl. :)

sOrder= "substring('" & String(50, "0") & "', 1, 50-DATALENGTH(IcqUin)) + IcqUin"
Medlem sedan maj 200010 687 inlägg
#18

Äh, fungerar väl inte... Men jag försökte i alla fall vara snäll. :)

137 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)