Just nu i M3-nätverket
Jump to content

Behöver hjälp med en sökfunktion


norcomp

Recommended Posts

Jag får inte till detta på något bra sätt

det blir en jävla massa if satser om man ska kunna få ut alla olika kombinationer, går det lösa på något bättre sätt, kör mot en Mysql

 

vill kunna söka på anonsrubrik samt annonstext

i vissa län eller alla, i vissa kategorier eller alla osv.

 

type1 ( annonstyp eller värdet "alla" )

cat ( annons kategori eller värdet "alla" )

lan ( län eller värdet "alla )

subject ( annonsrubrik )

body ( annonstext )

 

 

 

[color="#0000ff"]If[/color] type1 = [GRÅ]"alla"[/GRÅ] [color="#0000ff"]And[/color] cat = [GRÅ]"alla"[/GRÅ] [color="#0000ff"]And[/color] lan = [GRÅ]"alla"[/GRÅ] [color="#0000ff"]Then[/color]
Addera = [GRÅ]"Select * From ads Where body Like '%%"[/GRÅ] & [b]Request[/b].Form([GRÅ]"search"[/GRÅ]) & [GRÅ]"%%' OR subject Like '%%"[/GRÅ] & [b]Request[/b].Form([GRÅ]"search"[/GRÅ]) & [GRÅ]"%%' order by datum DESC"[/GRÅ] 

[color="#0000ff"]Else[/color] [color="#0000ff"]If[/color] blablablabla
[color="#0000ff"]Else[/color] [color="#0000ff"]If[/color] blblablalala

 

Link to comment
Share on other sites

mambofeber

hej! istället för att använda många If-satser, kan man använda en Case sats. tror inte att det går snabbare mha en CASE sats, men det blir snyggare då. däremot är det bättre att använda en CASE i C++.

sVal=[b]Request[/b].Form([GRÅ]"formVal"[/GRÅ])
[color="#0000ff"]Select[/color] [color="#0000ff"]Case[/color] sVal
[color="#0000ff"]Case[/color] [GRÅ]"1"[/GRÅ]
SQL....
[color="#0000ff"]Case[/color] [GRÅ]"2"[/GRÅ]
SQL...
[color="#0000ff"]Case[/color] [GRÅ]"3"[/GRÅ]
SQL...[color="#0000ff"]Case[/color] [color="#0000ff"]Else[/color]
[color="#006400"]' osv...[/color]
[color="#0000ff"]End[/color] [color="#0000ff"]Select[/color]

 

hur väljer man type1="alla", cat="alla" osv.? om du t ex har en droplist till "type1", droplist till "cat" osv. så borde det räcka med en SQL-rad.

 

[color="#0000ff"]If[/color] type1<>[GRÅ]""[/GRÅ] [color="#0000ff"]And[/color] cat<>[GRÅ]""[/GRÅ] ...[color="#0000ff"]Then[/color]
[color="#0000ff"]Select[/color] * FROM ads WHERE type1= Reguest.Form([GRÅ]"type"[/GRÅ]) [color="#0000ff"]And[/color] cat= [b]Request[/b].Form([GRÅ]"cat"[/GRÅ])...
[color="#0000ff"]Else[/color]
....
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

förstår du resonemanget?

 

Link to comment
Share on other sites

typ1, cat, lan = droplist

där kan värdena vara tex. ( säljes, damcykel, skåne eller alla, alla, alla)

dvs. alla typer, alla kategorier, alla län

 

jag vill alltsså kunna skriva in "cykel" i sökfältet

och välja type1=alla typer, cat=alla kategorier, lan=skåne från dropboxarna

 

och då vill jag få fram annonser som finns i skåne och där

annonsrubrik eller annonstext inehåller ordet "cykel"

 

dvs.

 

om typ1=alla cat=alla lan=alla

visa från alla, alla, alla

 

om typ1=säljes cat=alla lan=alla

visa från säljes,alla,alla

 

om typ1=säljes cat=cykelpump lan=alla

visa från säljes,cykelpump,alla

 

om typ1=säljes cat=cykelpump lan=skåne

visa från säljes,cykelpump,skåne

 

om typ1=alla cat=damsadel lan=alla

visa från alla,damsadel,alla

 

o.s.v

 

 

 

[inlägget ändrat 2005-05-26 23:31:59 av norcomp]

Link to comment
Share on other sites

mambofeber

nu vet jag inte vad dina kolumner heter i din tabell, men borde det inte fungrera enlig följande...

sTyp=[b]Request[/b].Form(type)
sCat=[b]Request[/b].Form(cat)
sLan=[b]Request[/b].Form(lan)

[color="#0000ff"]If[/color] sTyp=[GRÅ]"ALLA"[/GRÅ] [color="#0000ff"]And[/color] sCat=[GRÅ]"ALLA"[/GRÅ] [color="#0000ff"]And[/color] sLan=[GRÅ]"ALLA"[/GRÅ] [color="#0000ff"]Then[/color]
    SQL = SELECT * FROM tabell WHERE annonstext='[GRÅ]"&sokfalt&"[/GRÅ]'"
[color="#0000ff"]Else[/color]
    SQL= SELECT * FROM tabell WHERE typ='[GRÅ]"&sTyp&"[/GRÅ]' AND cat= '[GRÅ]"&sCat&"[/GRÅ]' AND lan= '[GRÅ]"&sLan&"[/GRÅ]' AND annonstext LIKE '[GRÅ]"&sokfalt&"[/GRÅ]'"
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

har jag missförstått dig så bifoga gärna en skärmdump på dina fält i tabellen

 

[inlägget ändrat 2005-05-26 23:48:48 av mambofeber]

Link to comment
Share on other sites

m a r c u s

Själv hade jag gjort något som:

 

q = [b]Request[/b].Form([GRÅ]"q"[/GRÅ])

[color="#0000ff"]If[/color] [b]Request[/b].Form(type1) <> [GRÅ]"alla"[/GRÅ] [color="#0000ff"]Then[/color] sTyp = [GRÅ]" AND typ = '"[/GRÅ] & [b]Request[/b].Form(type1) & [GRÅ]"' "[/GRÅ]

[color="#0000ff"]If[/color] [b]Request[/b].Form(cat) <> [GRÅ]"alla"[/GRÅ] [color="#0000ff"]Then[/color] sKat = [GRÅ]" AND cat = '"[/GRÅ] & [b]Request[/b].Form(cat) & [GRÅ]"' "[/GRÅ]

[color="#0000ff"]If[/color] [b]Request[/b].Form(lan) <> [GRÅ]"alla"[/GRÅ] [color="#0000ff"]Then[/color] sLan = [GRÅ]" AND lan = '"[/GRÅ] & [b]Request[/b].Form(lan) & [GRÅ]"' "[/GRÅ]

sql = [GRÅ]"SELECT * FROM tabell WHERE (subject LIKE '%"[/GRÅ] & q & [GRÅ]"%' OR body LIKE '%"[/GRÅ] & q & [GRÅ]"') "[/GRÅ] & sTyp & sKat & sLan & [GRÅ]" ORDER BY datum DESC"[/GRÅ]

 

Med reservation för felskrivningar.

 

Link to comment
Share on other sites

Jo jag är med

 

men det måste ju bli en massa fler kombinationer

t.e.x

 

 

 

[color="#0000ff"]If[/color] sTyp=[GRÅ]"ALLA"[/GRÅ] [color="#0000ff"]And[/color] sCat=[GRÅ]"ALLA"[/GRÅ] [color="#0000ff"]And[/color] sLan=[GRÅ]"ALLA"[/GRÅ] [color="#0000ff"]Then[/color]
    SQL = [color="#0000ff"]Select[/color] * From ads Where body Like [color="#006400"]'%%[GRÅ]" & Request.Form("[/GRÅ]search[GRÅ]") & "[/GRÅ]%%' OR subject Like '%%[GRÅ]" & Request.Form("[/GRÅ]search[GRÅ]") & "[/GRÅ]%%'[/color]

[color="#0000ff"]Else[/color] [color="#0000ff"]If[/color] sCat=[GRÅ]"ALLA"[/GRÅ] [color="#0000ff"]And[/color] sLan=[GRÅ]"ALLA"[/GRÅ] [color="#0000ff"]Then[/color]
    SQL = [color="#0000ff"]Select[/color] * From ads Where [b]sTyp[/b] Like [color="#006400"]'%%[GRÅ]" & Request.Form("[/GRÅ]type1[GRÅ]") & "[/GRÅ]%%' [color="#0000ff"]And[/color] Where body Like '%%[GRÅ]" & Request.Form("[/GRÅ]search[GRÅ]") & "[/GRÅ]%%' OR subject Like '%%[GRÅ]" & Request.Form("[/GRÅ]search[GRÅ]") & "[/GRÅ]%%'[/color]

[color="#0000ff"]Else[/color] [color="#0000ff"]If[/color] sLan=[GRÅ]"ALLA"[/GRÅ] [color="#0000ff"]Then[/color]
    SQL = [color="#0000ff"]Select[/color] * From ads Where [b]sTyp[/b] Like [color="#006400"]'%%[GRÅ]" & Request.Form("[/GRÅ]type1[GRÅ]") & "[/GRÅ]%%' [color="#0000ff"]And[/color] [b]sCat[/b] Like '%%[GRÅ]" & Request.Form("[/GRÅ]cat[GRÅ]") & "[/GRÅ]%%' [color="#0000ff"]And[/color] Where body Like '%%[GRÅ]" & Request.Form("[/GRÅ]search[GRÅ]") & "[/GRÅ]%%' OR subject Like '%%[GRÅ]" & Request.Form("[/GRÅ]search[GRÅ]") & "[/GRÅ]%%'[/color]

 

O.s.v i en massa olika varianter för att täcka upp alla tänkbara kombinationer

utav typ, cat, län

dvs. har en kategori valts, eller skall alla visas

har en typ valt eller skall alla visas,

har ettt Län valts eller skall alla visas

 

Jag tänker säker fel ?

 

[inlägget ändrat 2005-05-27 00:01:19 av norcomp]

[inlägget ändrat 2005-05-27 00:03:09 av norcomp]

[inlägget ändrat 2005-05-27 00:04:49 av norcomp]

Link to comment
Share on other sites

m a r c u s

Om "alla" är valt får tillhörande variabel i mitt exempel inget värde (tom sträng) och alltså sätts ingen begränsning i sökningen. Så som det ska vara.

 

Link to comment
Share on other sites

Får prova det, men nu är det fan dax att slagga

tack så länge, får se i morrn om det funkar

 

Link to comment
Share on other sites

Hmm....

borde det inte se ut nått i den här stilen ?

för annars söker den ju efter annonser som inneåller texten "alla"

på Län, och det funkar ju inte

 

Jag får då fan inte till det

 

q = [b]Request[/b].Form([GRÅ]"q"[/GRÅ])

[color="#0000ff"]If[/color] [b]Request[/b].Form(type1) <> [GRÅ]"alla"[/GRÅ] [color="#0000ff"]Then[/color] sTyp = [GRÅ]""[/GRÅ]
[color="#0000ff"]Else[/color] sTyp = [GRÅ]" AND typ = '"[/GRÅ] & [b]Request[/b].Form(type1) & [GRÅ]"' "[/GRÅ]

[color="#0000ff"]If[/color] [b]Request[/b].Form(cat) <> [GRÅ]"alla"[/GRÅ] [color="#0000ff"]Then[/color] sTyp = [GRÅ]""[/GRÅ]
[color="#0000ff"]Else[/color] sTyp = [GRÅ]" AND typ = '"[/GRÅ] & [b]Request[/b].Form(cat) & [GRÅ]"' "[/GRÅ]

[color="#0000ff"]If[/color] [b]Request[/b].Form(lan) <> [GRÅ]"alla"[/GRÅ] [color="#0000ff"]Then[/color] sTyp = [GRÅ]""[/GRÅ]
[color="#0000ff"]Else[/color] sTyp = [GRÅ]" AND typ = '"[/GRÅ] & [b]Request[/b].Form(lan) & [GRÅ]"' "[/GRÅ]

sql = [GRÅ]"SELECT * FROM ads WHERE (subject LIKE '%"[/GRÅ] & q & [GRÅ]"%' OR body LIKE '%"[/GRÅ] & q & [GRÅ]"') "[/GRÅ] & sTyp & sKat & sLan & [GRÅ]" ORDER BY datum DESC"[/GRÅ]

 

Link to comment
Share on other sites

Borde det inte se ut typ så här ?

 

för nu söker den ju efter annonser där län är texten "alla"

och det går ju inte

 

q = [b]Request[/b].Form([GRÅ]"q"[/GRÅ])

[color="#0000ff"]If[/color] [b]Request[/b].Form(type1) <> [GRÅ]"alla"[/GRÅ] [color="#0000ff"]Then[/color] sTyp = [GRÅ]""[/GRÅ]
[color="#0000ff"]Else[/color] sTyp = [GRÅ]" AND typ = '"[/GRÅ] & [b]Request[/b].Form(type1) & [GRÅ]"' "[/GRÅ]

[color="#0000ff"]If[/color] [b]Request[/b].Form(cat) <> [GRÅ]"alla"[/GRÅ] [color="#0000ff"]Then[/color] sTyp = [GRÅ]""[/GRÅ]
[color="#0000ff"]Else[/color] sTyp = [GRÅ]" AND typ = '"[/GRÅ] & [b]Request[/b].Form(cat) & [GRÅ]"' "[/GRÅ]

[color="#0000ff"]If[/color] [b]Request[/b].Form(lan) <> [GRÅ]"alla"[/GRÅ] [color="#0000ff"]Then[/color] sTyp = [GRÅ]""[/GRÅ]
[color="#0000ff"]Else[/color] sTyp = [GRÅ]" AND typ = '"[/GRÅ] & [b]Request[/b].Form(lan) & [GRÅ]"' "[/GRÅ]

sql = [GRÅ]"SELECT * FROM ads WHERE (subject LIKE '%"[/GRÅ] & q & [GRÅ]"%' OR body LIKE '%"[/GRÅ] & q & [GRÅ]"') "[/GRÅ] & sTyp & sKat & sLan & [GRÅ]" ORDER BY datum DESC"[/GRÅ]

[inlägget ändrat 2005-05-27 17:16:05 av norcomp]

Link to comment
Share on other sites

m a r c u s

[color="#0000ff"]If[/color] [b]Request[/b].Form(type1) <> [GRÅ]"alla"[/GRÅ] [color="#0000ff"]Then[/color] sTyp = [GRÅ]" AND typ = '"[/GRÅ] & [b]Request[/b].Form(type1) & [GRÅ]"' "[/GRÅ]

 

Översatt: Om du inte har valt alla, sätt variabeln sTyp.

 

Då variabeln är satt begränsas sökningen i databasen. På vilket sätt fungerar den inte som du vill?

 

Link to comment
Share on other sites

Men åhhh !

varför krångla till det ?

det verkar fungera med detta

 

 

a = [b]Request[/b].Form([GRÅ]"type1"[/GRÅ])
b = [b]Request[/b].Form([GRÅ]"cat"[/GRÅ])
c = [b]Request[/b].Form([GRÅ]"lan"[/GRÅ])
d = [b]Request[/b].Form([GRÅ]"search"[/GRÅ])

Addera = [GRÅ]"Select * From ads Where body Like '%%"[/GRÅ] & d & [GRÅ]"%%' OR subject Like '%%"[/GRÅ] & d & [GRÅ]"%%' and lan Like '%%"[/GRÅ] & c & [GRÅ]"%%' and cat Like '%%"[/GRÅ] & b & [GRÅ]"%%' and type1 Like '%%"[/GRÅ] & a & [GRÅ]"%%'order by datum DESC"[/GRÅ] 

 

[inlägget ändrat 2005-05-27 17:31:58 av norcomp]

 

Nop !

den här strular till det så sökningen blir galen

 

 

[b]OR[/b] subject Like [color="#006400"]'%%[GRÅ]" & d & "[/GRÅ]%%'[/color]

[inlägget ändrat 2005-05-27 17:34:56 av norcomp]

Link to comment
Share on other sites

m a r c u s

Men nu söker du ju på län som heter %alla% om man väljer det. Eller har du bytt "alla" mot tomma strängen?

 

Link to comment
Share on other sites

m a r c u s

sql=[GRÅ]"Select * From ads Where (body Like '%%"[/GRÅ] & d & [GRÅ]"%%' OR subject Like '%%"[/GRÅ] & d & [GRÅ]"%%') and lan Like '%%"[/GRÅ] & c & [GRÅ]"%%' and cat Like '%%"[/GRÅ] & b & [GRÅ]"%%' and type1 Like '%%"[/GRÅ] & a & [GRÅ]"%%'order by datum DESC"[/GRÅ] 

 

Parenteser runt OR borde hjälpa.

 

 

Men jag tycker fortfarande det är onödigt att säga: cat LIKE '%%'. Vet visserligen inte hur databasen behandlar det, men det känns som om det tar onödiga resurser.

 

 

 

 

[inlägget ändrat 2005-05-27 17:40:40 av m a r c u s]

Link to comment
Share on other sites

För varje val som du gör i dina selectboxar vill du väl minska ner antalet träffar??

 

T ex

 

a = Request.Form("type1")

b = Request.Form("cat")

c = Request.Form("lan")

d = Request.Form("search") 'detta säger vi är ditt fria sökord

 

'Bygg where-sats

dim sWhere

sWhere = ""

if not a = "" then

..if not sWhere = "" then

....sWhere = sWhere & " and "

..end if

..sWhere = sWhere & " type1 like '%"&a&"%' "

end if

 

if not b = "" then

..if not sWhere = "" then

....sWhere = sWhere & " and "

..end if

..sWhere = sWhere & " cat like '%"&b&"%' "

end if

 

if not c = "" then

..if not sWhere = "" then

....sWhere = sWhere & " and "

..end if

..sWhere = sWhere & " lan like '%"&c&"%' "

end if

 

if not d = "" then

..if not sWhere = "" then

....sWhere = sWhere & " and "

..end if

..sWhere = sWhere & " (subject like '%"&d&"%' or body like '%"&d&"%') "

end if

 

Detta innebär att om du nu har värden i dina forms så bygger du på wheresatsen. Om det inte finns några värden så söker du på allt eftersom sWhere då blir tom.

 

sSql = "Select * from ads "&sWhere

 

Borde funka...

BTW - punkterna i början på raderna är bara för indentering, du får ta bort dem sen.

 

Edit: fnuttar..

[inlägget ändrat 2005-05-28 01:11:37 av Jenny R2]

Link to comment
Share on other sites

Paranteser runt OR funkade inte

 

[inlägget ändrat 2005-05-28 11:23:33 av norcomp]

Link to comment
Share on other sites

Skåningen

Borde det inte räcka med att köra 2 sql satser.

 

en som söker på ett specielt län + produkten.

eller

alla län + produkt.

 

/Du kan alltid nå mig via skolans växel.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...