webForumDet fria alternativet

Söka i databas

ASP

18 svar · 255 visningar · startad av ConnyFox

Medlem sedan aug. 20011 087 inlägg
Frågan#1

Jo jag håller på med en funktion där man kan söka på medlemmarna som finns i en databas.. o jag undrar hur man gör för att i sql satsen plocka ut inläggen i tabellen nickname som innehåller det som man postat från en form..

Antar att det är LIKE som ska bytas ut mot något ?!

SQL = "Select * From members where nick [b]LIKE[/b] '"& Request.form("nick") &"'"

------------------
*brölar ljudligt*

Medlem sedan juni 200032 967 inlägg
#2

Provat med ett enkelt likhetstecken?

------------------
Don't panic!

Medlem sedan aug. 20011 087 inlägg
#3

ja men det är ju samma sak.. like och = men då söker dom ju ut dom trådarna som är = (lika med) inte som innehåller det man postat..

------------------
*brölar ljudligt*

Medlem sedan juni 200032 967 inlägg
#4

Du vill alltså ha en like-sökning? Då saknar du ett par wildcards:

SQL = "Select * From members where nick LIKE '%"& Request.form("nick") &"%'"

Fast jag är ju inte helt med på vad du menar, förstås.

Red: wildcard på fel ställe. :x

Mvh,

------------------
Don't panic!

[Redigerat av @nders den 13 dec 2001]

Medlem sedan aug. 20011 087 inlägg
#5

hehe like betyder väll lika med?

Saken e den att jag inte vill söka ut dom som är LIKA med request.form utan dom som INNEHÅLLER d som kommer med request.formen ;)

så om man söker på fox kommer foxxen lillfox lollifox o allt som innehåller fox att listas o inte bara just fox
förstår du va jag menar? *lite velig*

------------------
*brölar ljudligt*

Medlem sedan dec. 200012 464 inlägg
#6

Den sqlsats som @nders skrev fungerar så som du skriver. Den hittar alla poster där sökordet ingår.

Är det något problem med att använda den?

------------------
essentitia preter non sans multiplicandum

Medlem sedan aug. 20011 087 inlägg
#7

Nix jag hadde låst mig på att d skulle vara samma som = ;) Aja tack iaf ska genast testa detta!

------------------
*brölar ljudligt*

Medlem sedan juni 200032 967 inlägg
#8

Nej, like är absolut inte lika med lika med.

Ersätt det med 'liknar' när du läser sql-frågan högt för dig själv. :)

Mvh,

------------------
Don't panic!

Medlem sedan aug. 20011 087 inlägg
#9

hehe tack ;) Föresten det funkade fin fint! *tackar o bugar*

En sak till, skulle vilja göra så att man kan söka på flera olika fält.
t.ex förnamn, efternamn, nick m.m har lite tanke stopp, nån ide på hur jag enklast löser det?

------------------
*brölar ljudligt*

Medlem sedan dec. 200012 464 inlägg
#10
SQL = "Select * From members where nick & fornamn & efternamn LIKE '%"& Request.form("nick") &"%'"

------------------
essentitia preter non sans multiplicandum

Medlem sedan aug. 20011 087 inlägg
#11

Hmm.. jadu nu när jag tänker efter e ju d ganska logiskt :O) danke danke!

------------------
*brölar ljudligt*

Medlem sedan aug. 20011 087 inlägg
#12

Fast då måste man ju på nått vis se till att alla request.form:arna kommer med oxå? och hur ser jag till att namn måste innehålla just request.form("namn") och inte request.form("nick") ?? *förvirrad* e som ni märker inte så haj på detta!

------------------
*brölar ljudligt*

Medlem sedan dec. 200012 464 inlägg
#13
SQL = "Select * From members where nick LIKE '%"& Request.form("nick") &"%'" _
& " or fornamn like '%" & request.form("namn") & "%'" _ 
& " or efternamn like '%" & request.form("namn") & "%'"

------------------
essentitia preter non sans multiplicandum

Medlem sedan aug. 20011 087 inlägg
#14

jaså d e så d ska gå till.. får det dock inte att funka riktigt.. Alltså vad betyder dom där , 3, 3, ? alldrig fattat det har bara lärt mig att så ska det vara :o)

Får error
Microsoft OLE DB Provider for ODBC Drivers fel '80040e10'

[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades.

/StajlLinks 1.0/memb_list.asp, rad 27

<% 

database = Server.MapPath("members.mdb")
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq="& database
Set RecSet = Server.CreateObject("ADODB.Recordset")

if Request.querystring("search") = "nick" then
[b]SQL = "Select * From members where nick LIKE '%"& Request.form("nick") &"%'" _
& " or fornamn like '%" & request.form("namn") & "%'" _ 
& " or efternamn like '%" & request.form("namn") & "%'" [/b]

elseif Request.querystring("order") = "nick" then
SQL = "SELECT * FROM members ORDER BY nick"

elseif Request.querystring("order") = "Namn" then
SQL = "SELECT * FROM members ORDER BY namn"

elseif Request.querystring("order") = "efternamn" then
SQL = "SELECT * FROM members ORDER BY efternamn"

else
SQL = "SELECT * FROM members ORDER BY datum"

end if

[b]RecSet.Open SQL, Connection, 3, 3[/b] <-- error på denna raden
%>

------------------
*brölar ljudligt*

Medlem sedan dec. 200012 464 inlägg
#15

Det felet får du om du har ett felaktigt kolumnnamn i selectsatsen. Heter kolumnen fornamn eller förnamn?

3,3 anger cursortyp och låsningstyp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthrstopen.asp

------------------
essentitia preter non sans multiplicandum

Medlem sedan aug. 20011 087 inlägg
#16

Aha ok, jo jag glömmde kolla att du hadde skrivit samma namn som mig du hadde skrivit fornamn jag har bara namn så nu funkade det.. ett annat problem.. spelar ingenroll vad jag skriver i någon av inputsen alla inläg listas ändå :o) t.ex om jag skriver fox i nick o klickar ok så listas alla inlägg.. helknas :o)

------------------
*brölar ljudligt*

Medlem sedan juni 200032 967 inlägg
#17

I din SQL-fråga jämför du med värden från både formulärsfältet nick, och fältet namn. Ska det vara så?

Mvh,

------------------
Don't panic!

Medlem sedan dec. 200012 464 inlägg
#18

Som @nders påpekar beror det på att du har or med. T.ex. om du inte anger något sökord för namn så blir ditt villkor

where nick like '%fox%' or namn like '%%'

vilket innebär att man hittar alla poster.

Du får nog lägga in lite dynamik i hur du bygger frågan

if Request.querystring("search") = "nick" then
SQL = "Select * From members where 1 = 1 "
if  request.form("nick") <> "" then
sql = sql & "or nick LIKE '%"& Request.form("nick") &"%' " 
end if
if  request.form("namn") <> "" then
sql = sql & "or namn LIKE '%"& Request.form("namn") &"%' " 
end if

------------------
essentitia preter non sans multiplicandum

Medlem sedan aug. 20011 087 inlägg
#19

Den där koden gav samma resultat.. ända skillnaden är att jag inte fattar va d e jag gör :o)

------------------
*brölar ljudligt*

261 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)