webForumDet fria alternativet

Att söka i flera kolumner

ASP

13 svar · 705 visningar · startad av bluespot

Medlem sedan nov. 200093 inlägg
Frågan#1

Jag har en access-databas med en tabell som heter (Coacher), i den tabellen finns flera kolumner, hur får jag sökningen att ske från ett sökfält (Fritext)?

Kolumnerna som jag vill söka i heter:
Namn
Adress
Ort

Jag har provat med Like utan något bra resultat.

Medlem sedan juni 20019 519 inlägg
#2
dim SQL,sok
sok = replace("" & request("sokord"), "'", "''")
SQL = "SELECT * FROM Coacher WHERE [name] LIKE %'" & sok & "' OR [Adress] LIKE %'" & sok & "' OR Ort LIKE %'" & sok & "';"

???

redigerat efter @nders :P

Medlem sedan juni 200032 967 inlägg
#3

Oj, här klantar vi oss både till höger och vänster, voigtann! :)

dim SQL,sok
sok = replace(request("sokord"), "'", "''")
SQL = "SELECT * FROM Coacher WHERE [name] LIKE '%" & sok & "%' OR [Adress] LIKE '%" & sok & "%' OR Ort LIKE '%" & sok & "%'"
Medlem sedan juni 20019 519 inlägg
#4

jag ska nog sluta att skriva inlägg helt enkelt ;)

Medlem sedan nov. 200093 inlägg
#5

Tack så mycket för hjälpen, funkade perfekt.

Medlem sedan nov. 200093 inlägg
#6

Efter ha tänkt lite längre så skulle jag också vilja tillsammans med frisökningsrutan även ha en lista som genereras ur databasen, problemet är att om det finns fler poster som heter samma sak så kommer dom ju självklart upp i listan, kan man utesluta att visa dubletter?

Medlem sedan juni 200032 967 inlägg
#7

Ja, använd SELECT DISTINCT när du hämtar datat så blir du av med dubletter.

Medlem sedan nov. 200093 inlägg
#8

Nu ser koden ut såhär:

dim SQL,sok
sok = replace(request("sokord"), "'", "''")
SQL = "SELECT * FROM Coacher WHERE [Namn] LIKE '%" & sok & "%' OR [Adress] LIKE '%" & sok & "%' OR Ort LIKE '%" & sok & "%'"

Men nu vill jag att från söksidan där en lista finns med Ort ska kunnas sökas på också. Alltså ska man kunna söka Ort ur en lista eller/och tillsammans med fritextsökningen.

Medlem sedan nov. 200093 inlägg
#9

@nders skrev:

Ja, använd SELECT DISTINCT när du hämtar datat så blir du av med dubletter.

SELECT DISTINCT Namn, Adress, Ort FROM Coacher

visar ändå dubletter.

Medlem sedan mars 20032 667 inlägg
#10

Distinct använder sig av hela select-listan. Så i detta faller beror det på vad du menar med dubletter. Du kan ju få två namn med Knut om de har olika orter exempelvis. Då är raderna inte lika.

Medlem sedan nov. 200093 inlägg
#11

Nu går Namn, Adress, Ort in i varsin lista som jag vill använda i ett sökformulär, kan man inte få bort dubletterna i varje lista då?

Medlem sedan juni 200032 967 inlägg
#12

Om du ska ha de i tre olika listor i sökformuläret; ställ tre SQL-frågor med DISTINCT eller sortera bort dubletterna i ASP-koden.

Medlem sedan nov. 200093 inlägg
#13

Tack, nu förstår jag hur det hänger ihop.

Nu har jag bara ett problem kvar. Det är sidan som tar emot sökformuläret.

dim SQL,mottagning,utbildning,omrade
namn = replace(request("fm_namn"), "'", "''")
adress = replace(request("fm_adress"), "'", "''")
ort = replace(request("fm_ort"), "'", "''")
SQL = "SELECT * FROM Coacher WHERE Namn LIKE '" & namn & "' AND Adress LIKE '" & adress & "' AND Ort LIKE '" & ort & "'"

Som det fungerar nu måste man välja exakt rätt i alla tre listorna på söksidan för att ett sökresultat ska visas, men min tanke var att man också bara ska kunna välja t ex ett namn ur Namn-listan så ska alla "Kalle" visas.

Medlem sedan juni 200032 967 inlägg
#14
  1. Varför använder du LIKE utan att ange wildcards i SQL-frågan? Använd = för exakta jämförelser, och LIKE när du med wildcards ska göra sökningar i text.
  2. Lägg bara med de villkor du vill ha med i SQL-frågan.
namn = replace(request("fm_namn"), "'", "''")
adress = replace(request("fm_adress"), "'", "''")
ort = replace(request("fm_ort"), "'", "''")
c=0
SQL = "SELECT * FROM Coacher "
if namn <> "" then
	if c = 0 then SQL = SQL & "WHERE " else SQL = SQL & "AND "
	SQL = SQL & "Namn = '" & namn & "' "
	c = 1
end if
if adress <> "" then
	if c = 0 then SQL = SQL & "WHERE " else SQL = SQL & "AND "
	SQL = SQL & "Adress = '" & adress & "' "
	c = 1
end if
if ort <> "" then
	if c = 0 then SQL = SQL & "WHERE " else SQL = SQL & "AND "
	SQL = SQL & "Ort = '" & ort & "' "
	c = 1
end if

c är en kontrollvariabel för att hålla koll på om vi ska ha and eller where.

Dylik kod går att skriva på massor av olika sätt, jag tog ett enkelt. :)

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)