---
title: "förbättra sökvariabler och SQL-fråga"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/140295-förbättra-sökvariabler-och-sql-fråga"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "devotion"
published: "2006-01-04T17:33:04.000Z"
updated: "2006-01-06T12:44:30.000Z"
replies: 9
views: 522
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/140295-förbättra-sökvariabler-och-sql-fråga"
---

# förbättra sökvariabler och SQL-fråga

## #1 — devotion, 2006-01-04T17:33Z

Hej!  :)

Har följnade kod som tar hand om en söksträng och villkor för sökningen.

```
'Ta emot sökordet
strSearchField = SQLSafe(Trim(Request.querystring("searchField")))

If SQLSafe(Request.querystring("searchOption")) = "eNumber" then
   strOption = "tblExArticle.eNumber = '" & strSearchField & "'"
End if

If SQLSafe(Request.querystring("searchOption")) = "articleName" then
    strOption = "tblExArticle.articleName LIKE '%" & strSearchField & "%'"
End If

If SQLSafe(Request.querystring("order")) = "eNumber" then
  strOrder = "tblExArticle.eNumber"
End If 
 
If SQLSafe(Request.querystring("order")) = "articleName" then
  strOrder = "tblExArticle.articleName, tblExArticle.eNumber"
End if

If pricesetting = 0 then
	strOrderBy = 8
Else
	strOrderBy = 9
End if
```

Själva SQL-frågan ser ut så här:

```
strSQL = 	"SELECT DISTINCT tblExArticle.eNumber, tblExArticle.articleName, tblExArticle.articleUnit, tblExPrice.articlePrice, " &_ 
			"tblExSupplier.SupplierName, tblExPrice.articleCategory, tblExDiscount.articleDiscount, articlePrice*0.01 " &_ 
			"AS articleNetPrice, iif(articleDiscount is null, 0.01*articlePrice, 0.01*[articlePrice]*(1-([articleDiscount]*0.01))) " &_
		 	"AS articlePriceWithDiscount " &_ 
			"FROM ((tblExArticle INNER JOIN tblExPrice ON tblExArticle.eNumber = tblExPrice.eNumber) " &_ 
			"LEFT JOIN tblExDiscount ON tblExPrice.articleCategory = tblExDiscount.articleCategory) " &_
         	"INNER JOIN tblExSupplier ON tblExPrice.articleSupplierId = tblExSupplier.SupplierId WHERE " & strOption & " " &_
			"ORDER BY " & strOrder & ", " & strOrderBy & " ASC"
```

Det fungerar så som jag vill ha det, men jag tycker det är lite klumpigt....

Hur skulle man kunna förbättra/snygga till det hela?
och
Hur "brukar man göra" med sql-frågor som har olika sökalternativ?

Mvh
henrik

Permalänk: https://www.webforum.nu/p/140295

## #2 — emission, 2006-01-04T23:35Z

Det är väl helt OK, men

\-Onödigt att använda SQLSafe i if-satserna. Det är ju inget som ingår i SQL-frågan
\-Det blir fel om "searchOption" eller "order" varken är "eNumber" eller "articleName".
\-Använd ElseIf i stället för flera If.

Permalänk: https://www.webforum.nu/p/1738815

## #3 — devotion, 2006-01-05T09:49Z

:)  

Ska titta på det....  Tack så länge

Mvh
henrik

Permalänk: https://www.webforum.nu/p/1738891

## #4 — devotion, 2006-01-05T22:29Z

tjabbarangs!

Nu ser koden ut så här:

```
'Ta emot sökordet
sSearchField = SQLSafe(Trim(Request.querystring("searchField")))

'Ta emot sökvillkor
sSearchOption = Request.querystring("searchOption")
sSearchOrder = Request.querystring("order")

'Kod för att sätta hur priser ska visas (ordinarie eller avtal)
if Request.Cookies("sydostelPrice")("PriceSetting") = "" then
	iPriceSetting = 0
else
	iPriceSetting = cint(Request.Cookies("sydostelPrice")("PriceSetting"))
end if

'Sätta defaultvärden
sOption = "tblExArticle.eNumber"
sOrder1 = "tblExArticle.eNumber"

'Sätta sökvillkor. Sökning på eNumber eller articleName
If sSearchOption = "eNumber" then
	sOption = "tblExArticle.eNumber = '" & sSearchField & "'"
ElseIf sSearchOption = "articleName" then
    sOption = "tblExArticle.articleName LIKE '%" & sSearchField & "%'"
End If

'Sätta första sorteringsvillkoret
If sSearchOrder = "eNumber" then
	sOrder1 = "tblExArticle.eNumber"
ElseIf sSearchOrder = "articleName" then
	sOrder1 = "tblExArticle.articleName, tblExArticle.eNumber"
End if

'Sätta andra sorteringsvillkoret
If iPriceSetting = 0 then
	sOrder2 = "8"
Else
	sOrder2 = "9"
End if
```

och sql-frågan

```
strSQL = 	"SELECT DISTINCT tblExArticle.eNumber, tblExArticle.articleName, tblExArticle.articleUnit, tblExPrice.articlePrice, " &_ 
			"tblExSupplier.SupplierName, tblExPrice.articleCategory, tblExDiscount.articleDiscount, articlePrice*0.01 " &_ 
			"AS articleNetPrice, iif(articleDiscount is null, 0.01*articlePrice, 0.01*[articlePrice]*(1-([articleDiscount]*0.01))) " &_
		 	"AS articlePriceWithDiscount " &_ 
			"FROM ((tblExArticle INNER JOIN tblExPrice ON tblExArticle.eNumber = tblExPrice.eNumber) " &_ 
			"LEFT JOIN tblExDiscount ON tblExPrice.articleCategory = tblExDiscount.articleCategory) " &_
         	"INNER JOIN tblExSupplier ON tblExPrice.articleSupplierId = tblExSupplier.SupplierId WHERE " & sOption & " " &_
			"ORDER BY " & sOrder1 & ", " & sOrder2 & " ASC"
```

Är det rätt, eller fel...   ;)  

och kan det förbättras ännu mer?

Mvh
henrik

Permalänk: https://www.webforum.nu/p/1739206

## #5 — Peter S, 2006-01-06T11:10Z

Att sätta sOption = "tblExArticle.eNumber" som defaultvärde kommer inte att fungera. Det du vill ha är sOption = "tblExArticle.eNumber = '" & sSearchField & "'". Från bl.a. det följer att vi kan förenkla if-satserna en aning.

```
'Kod för att sätta hur priser ska visas (ordinarie eller avtal)
if Request.Cookies("sydostelPrice")("PriceSetting") = "" then
	iPriceSetting = 0
else
	iPriceSetting = cint(Request.Cookies("sydostelPrice")("PriceSetting"))
end if

'Ta emot sökordet
sSearchField = SQLSafe(Trim(Request.querystring("searchField")))

'Ta emot sökvillkor
sSearchOption = Request.querystring("searchOption")
sSearchOrder = Request.querystring("order")

'Sätta defaultvärden
sOption = "tblExArticle.eNumber = '" & sSearchField & "'"
sOrder1 = "tblExArticle.eNumber"

'Sätta sökvillkor. Sökning på eNumber eller articleName
If sSearchOption = "articleName" then
    sOption = "tblExArticle.articleName LIKE '%" & sSearchField & "%'"
End If

'Sätta första sorteringsvillkoret
If sSearchOrder = "articleName" then
	sOrder1 = "tblExArticle.articleName, " & sOrder1
End if

'Sätta andra sorteringsvillkoret
If iPriceSetting = 0 then
	sOrder2 = "8"
Else
	sOrder2 = "9"
End if
```

 :)

Permalänk: https://www.webforum.nu/p/1739301

## #6 — devotion, 2006-01-06T11:49Z

> Att sätta sOption = "tblExArticle.eNumber" som defaultvärde kommer inte att fungera. Det du vill ha är sOption = "tblExArticle.eNumber = '" & sSearchField & "'".

Kan du förklara det?

Mvh
henrik

Permalänk: https://www.webforum.nu/p/1739324

## #7 — Peter S, 2006-01-06T11:53Z

Japp  :) 

Antag att searchOption = "foobar". Då kommer defaultvärdet att användas vilket resulterar i följande:

```
WHERE " & sOption & " " &_
     =>
WHERE tblExArticle.eNumber (<- vad skall detta betyda?)
```

Du vill ju nämligen jämföra tblExArticle.eNumber med något, t.ex.:

```
WHERE tblExArticle.eNumber [b]=[/b] 'hejhopp'
```

Permalänk: https://www.webforum.nu/p/1739328

## #8 — devotion, 2006-01-06T12:19Z

:r

Jo! det är klart!

Inget annat som kan förbättras?

Mvh
henrik

Permalänk: https://www.webforum.nu/p/1739342

## #9 — Peter S, 2006-01-06T12:38Z

Jag tycker det ser bra ut nu.  :)

Permalänk: https://www.webforum.nu/p/1739354

## #10 — devotion, 2006-01-06T12:44Z

dåså....

Tackar!

Mvh Henrik  :)

Permalänk: https://www.webforum.nu/p/1739358

---

Tråden på webben: https://www.webforum.nu/amne/asp/140295-förbättra-sökvariabler-och-sql-fråga
