webForumDet fria alternativet

Söka på fler fält i databasen

Databaser & SQL

23 svar · 568 visningar · startad av Meng

Medlem sedan feb. 2003549 inlägg
Frågan#1

Hur gör jag om jag istället för att bara söka på Palle1 i databasen alltid söker på Palle 1, 2, 3, 4, 5, 6 ?

SQL = "Select * From varelager Where Palle1 Like '%" & Request.Querystring("sokord") & "%' "
Medlem sedan juni 200032 967 inlägg
#2

Lägg til villkoren för fälten med OR i WHERE-satsen.
Lägg gärna en parentes runt hela Palle-blocket också, för att undvika problem med konstiga resultat om du har fler villkor i WHERE-delen.

Medlem sedan dec. 200012 464 inlägg
#3

Designa inte en tabell på det sättet. Istället för att ha flera kolumner så använder man en extra tabell där man lagrar flera rader.

Flyttas från ASP

Medlem sedan feb. 2003549 inlägg
#4

Det vet jag LarsG men i detta fallet var det bästa sättet och sen skal de användas just 6 på varje post. Provar ditt förslag @nders.

Medlem sedan feb. 2003549 inlägg
#5

Får de inte riktigt till att funka, säkert nåt fnutt fel.. eller?

SQL = "Select * From " & Tabbe & " Where[B](palle1 OR palle2 OR palle3 OR palle4 OR palle5 OR palle6)[/B] Like '%" & Request.Querystring("sokord") & "%' AND sletdato is null AND slutdato is null Order By " & Request.Querystring("falt") & " " & Request.Querystring("form") & ""
Medlem sedan juni 200032 967 inlägg
#6

Du måste lägga till varje fält som ett eget villkor. Det finns inga genvägar.

Where (palle1 Like '%" & Request.Querystring("sokord") & "%' or palle2 Like '%" & Request.Querystring("sokord") & "%')
Medlem sedan juli 2003465 inlägg
#7

/red försent @nders hann före

Medlem sedan juni 200032 967 inlägg
#8

Sen kan man ju tycka det är mysigt att lagra sökordet i en variabel istället, och glöm inte heller bort skydd mot sql injection.

Medlem sedan feb. 200112 078 inlägg
#9

/red. Redan gjort. ;)

Medlem sedan feb. 2003549 inlägg
#10

Vad är det nu för generalfel jag gör?

Microsoft OLE DB Provider for ODBC Drivers error '80040e10' 
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. 

/overskudslager/ol_bruger_reservere.asp, line 744
SQL = "Select * From varelager Where 
(palle1 Like '%" & Request.Querystring("sokord") & "%' or 
palle2 Like '%" & Request.Querystring("sokord") & "%' or 
palle3 Like '%" & Request.Querystring("sokord") & "%' or 
palle4 Like '%" & Request.Querystring("sokord") & "%' or 
palle5 Like '%" & Request.Querystring("sokord") & "%' or 
palle6 Like '%" & Request.Querystring("sokord") & "%') 
AND sletdato is null AND slutdato is null Order By " & 
Request.Querystring("falt") & " " & Request.Querystring("form") & ""

744:

RecSet.Open SQL, Conn

Vad är sql injection ?

Medlem sedan juni 200032 967 inlägg
#11

Vad är det nu för generalfel jag gör?

Till att börja med, skriv ALLTID ut den FÄRDIGA SQL-frågan. Vi kan inte gissa oss till vad dina variabler innehåller.

Felmeddelandet brukar betyda att du angett ett felaktigt tabell- eller fältnamn.

SQL Injection: gör en liten sökning här på wF och återkom med följdfrågor.

Medlem sedan feb. 2003549 inlägg
#12

Förlåt, här kommer den färdiga

Select * From varelager Where (palle1 Like '%a%' or palle2 Like '%a%' or palle3 Like '%a%' or palle4 Like '%a%' or palle5 Like '%a%' or palle6 Like '%a%') AND sletdato is null AND slutdato is null Order By lokation ASC
Medlem sedan juni 200032 967 inlägg
#13

Då får du kolla att alla tabell- och fältnamn är rättstavade.

Medlem sedan feb. 2003549 inlägg
#14

Fick løst det nu, försökte sortera efter ett felstavat fält..

En annan fråga.. hur använder jag detta i en If-sats?

<%If RecSet("palle1") Like '%" & Request.Querystring(sokord) & "%' Then%>
<%=RecSet("palle1")%>
<%ElseIf RecSet("palle1") Like '%" & Request.Querystring(sokord) & "%' Then%>
<%=RecSet("palle2")%>
<%End If%>

För jag kan väl inte använda Like här..

Medlem sedan dec. 20025 483 inlägg
#15
if instr(RecSet("palle1"), Request.Querystring(sokord)) <> 0 then
Medlem sedan feb. 2003549 inlägg
#16

varför <> 0 ? vad gör det? =) undrarbara, för det funkar såklart prima..

Föresten hur gör jag om nu både Palle1 och Palle2 innehåller bokstaven a?

<%If instr(RecSet("palle1"), Request.Querystring(sokord)) <> 0 Then%>
Palle1: <%=RecSet("palle1")%>
<%ElseIf instr(RecSet("palle2"), Request.Querystring(sokord)) <> 0 Then%>
Palle2: <%=RecSet("palle2")%>
<%ElseIf instr(RecSet("palle3"), Request.Querystring(sokord)) <> 0 Then%>
Palle3: <%=RecSet("palle3")%>
<%ElseIf instr(RecSet("palle4"), Request.Querystring(sokord)) <> 0 Then%>
Palle4: <%=RecSet("palle4")%>
<%ElseIf instr(RecSet("palle5"), Request.Querystring(sokord)) <> 0 Then%>
Palle5: <%=RecSet("palle5")%>
<%ElseIf instr(RecSet("palle6"), Request.Querystring(sokord)) <> 0 Then%>
Palle6: <%=RecSet("palle6")%>
<%End If%>
Medlem sedan dec. 20025 483 inlägg
#17

instr() returnerar positionen för substrängen inom den första strängen. En nolla (0) innebär att det inte finns någon matchning.

/Red:

for i = 1 to 6
    if instr(recset("palle" & i), request.querystring(sokord)) <> 0 then
        response.write "Palle" & i & ": " & recset("palle" & i) & "<br>"
    end if
next
Medlem sedan feb. 2003549 inlägg
#18

men nu om jag t ex søker på 123 så får jag som svar:

Palle1: A122
Palle2: A123

Kan man göra så man bara får Palle2: A123 som svar

Medlem sedan dec. 20025 483 inlägg
#19

Det måste vara omöjligt att instr("A122", "123") <> 0!

Medlem sedan feb. 2003549 inlägg
#20

tycker jag också men så blir det...

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