/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Søgning - Flere kriterier i samme felt, fo~
Fra : Henrik B. H.


Dato : 04-05-06 08:21

Hej, Jeg håber at I kan hjælpe med dette.

Jeg skal lave en søgefunktion, der giver brugeren mulighed for at søge på
flere kriterier.
Søgningen skal virkeindsnævrende - dvs. at jo flere kriterier der søges på,
jo færre resultatet/matches vil der være. Det skulle give muligheden for at
opnå et meget præcist resultat.

Tabellen der søges i, er således opbygget.
feltnavn
- ID (int)
- dataEntry (nvarchar)
- userID (int)

Der er flere poster i tabellen, der refererer til samme userID. Søgningen
skal "grupperes" efter userID, således at søgekriterierne skal tjekkes i
alle poster for hvert brugerID.

En søgning kunne se således ud: idræt+marketing+lærer = 3 søgekriterier.
Disse kriterier skal alle være opfyldt i resultatlisten. I praksis betyder
det at 2 af kriterierne findes i en post og det sidste en anden (for hvert
userID).

Jeg splitter søgekriterierne op på følgende måde:
- varExtSearchCriteria = trim(request.Form("ExtsearchTXT"))
- arrWords = split(varExtSearchCriteria,"+")

Jeg glæder mig meget til at høre fra jer, da jeg sidder godt og grundigt
fast i dette.

MVH / Henrik

PS: Jeg håber at mit spørgsmål er forklaret tilfredsstillende - I må endelig
sige til, hvis I savner information.




 
 
Lars Hoffmann (04-05-2006)
Kommentar
Fra : Lars Hoffmann


Dato : 04-05-06 10:24

Henrik B. H. wrote:

> Jeg splitter søgekriterierne op på følgende måde:
> - varExtSearchCriteria = trim(request.Form("ExtsearchTXT"))
> - arrWords = split(varExtSearchCriteria,"+")


Det du skal er således at opbygge en korrekt SQL streng for hver data
i dit array -



<%
dim word
varExtSearchCriteria = "idræt+marketing+lærer"

arrWords = split(varExtSearchCriteria,"+")


SQL = "SELECT ID, DataEntry, UserID "
SQL = SQL & "WHERE 1=1 "

for each word in arrWords
   SQL = SQL & "AND dataEntry like '%" & replace(word,"'","''") & "'%' "

next

SQL = SQL & "ORDER BY UserID"
%>

et skulle give dig alle de records der overholder alle kriterierne.
Tricket med WHERE 1=1 er blot for at kunne starte alle efterfølgende
linier med AND.

Lad os antage at du indlæser det hele i et recordset kaldet ADORec.
Så looper du blot over ADORec og for hver gang dit UserID ændres,
udskriver du det for at vise grupperingen:

<%
dim prevUserId
prevUserId = 0

Do While not ADORec.EOF
IF (prevUserId <> ADORec.fields("UserId")) THEN
response.write("Bruger: " & ADORec.fields("UserId"))
END IF

prevUserId = ADORec.fields("UserId")
ADORec.MoveNext
loop
%>

Håber det kan bruges

Med venlig hilsen
Lars Hoffmann


Lars Hoffmann (04-05-2006)
Kommentar
Fra : Lars Hoffmann


Dato : 04-05-06 10:27

Lars Hoffmann wrote:

> SQL = "SELECT ID, DataEntry, UserID "
> SQL = SQL & "WHERE 1=1 "


Og jeg mangler naturligvis FROM delen:

SQL = "SELECT ID, DataEntry, UserID "
SQL = SQL & "FROM myTable "
SQL = SQL & "WHERE 1=1 "


Henrik B. H. (04-05-2006)
Kommentar
Fra : Henrik B. H.


Dato : 04-05-06 10:47

Hej Lars, Tak for dit hurtige svar.
Jeg får en type-fejl, når jeg prøver at afvikle koden.

Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D)
Typer stemmer ikke overens
- line 34

linie 34 = strSQL1 = strSQL1 & "AND dataEntry like '%" &
replace(arrWords,"'","''") & "'%' "

----------------------- koden opdateret/tilpasset -----------------------
Dim varExtSearchCriteria, arrWords, word, prevUserId
varExtSearchCriteria = trim(request.Form("ExtsearchTXT"))

varExtSearchCriteria = replace(varExtSearchCriteria,"æ","&aelig;")
varExtSearchCriteria = replace(varExtSearchCriteria,"ø","&oslash;")
varExtSearchCriteria = replace(varExtSearchCriteria,"å","&aring;")

session("ExtSearchCriteria") = varExtSearchCriteria

arrWords = split(varExtSearchCriteria,"+")

strSQL1 = "SELECT dataID, DataEntry, UserID "
strSQL1 = strSQL1 & "FROM tbl_cv_data "
strSQL1 = strSQL1 & "WHERE 1=1 "
for each word in arrWords
strSQL1 = strSQL1 & "AND dataEntry like '%" & replace(arrWords,"'","''")
& "'%' "
next
strSQL1 = strSQL1 & "ORDER BY UserID"
Set rsExtSearch = Connect.Execute(strSQL1)

prevUserId = 0
Do While not rsExtSearch.EOF
IF (prevUserId <> rsExtSearch.fields("UserId")) THEN
response.write("Bruger: " & rsExtSearch.fields("UserId"))
END IF
prevUserId = rsExtSearch.fields("UserId")
rsExtSearch.MoveNext
loop
----------------------- koden opdateret/tilpasset -----------------------

Håber du kan hjælpe.

MVH
Henrik

"Lars Hoffmann" <lars@intercambiodvd.com> skrev i en meddelelse
news:1146734839.082832.227830@v46g2000cwv.googlegroups.com...
> Lars Hoffmann wrote:
>
>> SQL = "SELECT ID, DataEntry, UserID "
>> SQL = SQL & "WHERE 1=1 "
>
>
> Og jeg mangler naturligvis FROM delen:
>
> SQL = "SELECT ID, DataEntry, UserID "
> SQL = SQL & "FROM myTable "
> SQL = SQL & "WHERE 1=1 "
>



Lars Hoffmann (04-05-2006)
Kommentar
Fra : Lars Hoffmann


Dato : 04-05-06 11:03


Henrik B. H. wrote:
> Hej Lars, Tak for dit hurtige svar.
> Jeg får en type-fejl, når jeg prøver at afvikle koden.
>
> Fejltype:
> Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D)
> Typer stemmer ikke overens
> - line 34
>
> linie 34 = strSQL1 = strSQL1 & "AND dataEntry like '%" &
> replace(arrWords,"'","''") & "'%' "


Du skal bruge "word" og ikke "arrWords" i den linie. word indeholder et
enkelt element fra dit array ved hver gennemløb og er en
strengvariabel, arrWords er jo et array, så det kan du ikke bruge i
replace.

Med venlig hilsen
Lars Hoffmann


Henrik B. H. (04-05-2006)
Kommentar
Fra : Henrik B. H.


Dato : 04-05-06 11:16

Hej igen,

Jeg har prøvet at ændre det, uden held.
Skal indholdet af "word" ikke defineres nogen steder?

---------------- Opdateret kode -----------------------
Dim varExtSearchCriteria, arrWords, word, prevUserId
varExtSearchCriteria = trim(request.Form("ExtsearchTXT"))

varExtSearchCriteria = replace(varExtSearchCriteria,"æ","&aelig;")
varExtSearchCriteria = replace(varExtSearchCriteria,"ø","&oslash;")
varExtSearchCriteria = replace(varExtSearchCriteria,"å","&aring;")

session("ExtSearchCriteria") = varExtSearchCriteria

arrWords = split(varExtSearchCriteria,"+")

strSQL1 = "SELECT dataID, DataEntry, UserID "
strSQL1 = strSQL1 & "FROM tbl_cv_data "
strSQL1 = strSQL1 & "WHERE 1=1 "
for each word in arrWords
strSQL1 = strSQL1 & "AND dataEntry like '%" & replace(word,"'","''") &
"'%' "
next
strSQL1 = strSQL1 & "ORDER BY UserID"
Set rsExtSearch = Connect.Execute(strSQL1)

prevUserId = 0
Do While not rsExtSearch.EOF
IF (prevUserId <> rsExtSearch.fields("UserId")) THEN
response.write("Bruger: " & rsExtSearch.fields("UserId"))
END IF
prevUserId = rsExtSearch.fields("UserId")
rsExtSearch.MoveNext
loop
---------------- Opdateret kode -----------------------


"Lars Hoffmann" <lars@intercambiodvd.com> skrev i en meddelelse
news:1146736980.814838.84320@v46g2000cwv.googlegroups.com...

Henrik B. H. wrote:
> Hej Lars, Tak for dit hurtige svar.
> Jeg får en type-fejl, når jeg prøver at afvikle koden.
>
> Fejltype:
> Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D)
> Typer stemmer ikke overens
> - line 34
>
> linie 34 = strSQL1 = strSQL1 & "AND dataEntry like '%" &
> replace(arrWords,"'","''") & "'%' "


Du skal bruge "word" og ikke "arrWords" i den linie. word indeholder et
enkelt element fra dit array ved hver gennemløb og er en
strengvariabel, arrWords er jo et array, så det kan du ikke bruge i
replace.

Med venlig hilsen
Lars Hoffmann



Lars Hoffmann (04-05-2006)
Kommentar
Fra : Lars Hoffmann


Dato : 04-05-06 11:26


Henrik B. H. wrote:
> Hej igen,
>
> Jeg har prøvet at ændre det, uden held.

Samme fejl i samme linie?

> Skal indholdet af "word" ikke defineres nogen steder?

Det bliver det i din "for" sætning. Jeg prøvede det lokalt på min
maskine og det virkede fint.

Med venlig hilsen
Lars Hoffmann


Henrik B. H. (04-05-2006)
Kommentar
Fra : Henrik B. H.


Dato : 04-05-06 13:22

Hej Lars,

Nu har jeg lige prøvet at kopiere koden over på en anden Server og her
opstår type-fejlen ikke.
- Så langt, så godt.

Jeg kan nu se at sql-strengen ikke har den ønskede effekt.
Jeg få stadigvæk ikke nogen resultater, når jeg søger på 2 kriterier. De 2
kriterier er fordelt på to poster i databasen for samme bruger.

Har du et bud?

MVH
Henrik


"Lars Hoffmann" <lars@intercambiodvd.com> skrev i en meddelelse
news:1146738354.347794.40710@j73g2000cwa.googlegroups.com...

Henrik B. H. wrote:
> Hej igen,
>
> Jeg har prøvet at ændre det, uden held.

Samme fejl i samme linie?

> Skal indholdet af "word" ikke defineres nogen steder?

Det bliver det i din "for" sætning. Jeg prøvede det lokalt på min
maskine og det virkede fint.

Med venlig hilsen
Lars Hoffmann



Lars Hoffmann (04-05-2006)
Kommentar
Fra : Lars Hoffmann


Dato : 04-05-06 13:32

Henrik B. H. wrote:

> Jeg kan nu se at sql-strengen ikke har den ønskede effekt.
> Jeg få stadigvæk ikke nogen resultater, når jeg søger på 2 kriterier. De 2
> kriterier er fordelt på to poster i databasen for samme bruger.

Jeg troede netop at du ville lave en indskrænkende søgning, men jeg
kan se at jeg har misforstået problemstillingen.

Hvis du har f.eks følgende datasæt:

dataID, DataEntry, UserID
1,'en kold is',1
2,'en varm is,1
3,'en varm kage',2

og søger på 'is+varm', hvilket søgeresultat regner du så med at
finde?


Henrik B. H. (04-05-2006)
Kommentar
Fra : Henrik B. H.


Dato : 04-05-06 13:56

Hej Lars,

I dit eksempel, skulle mit ønskede resultat være 1 resultat - userID #1, da
vedkommende opfylder begge kriterier.

MVH
Henrik


"Lars Hoffmann" <lars@intercambiodvd.com> skrev i en meddelelse
news:1146745921.640900.129450@e56g2000cwe.googlegroups.com...
Henrik B. H. wrote:

> Jeg kan nu se at sql-strengen ikke har den ønskede effekt.
> Jeg få stadigvæk ikke nogen resultater, når jeg søger på 2 kriterier. De 2
> kriterier er fordelt på to poster i databasen for samme bruger.

Jeg troede netop at du ville lave en indskrænkende søgning, men jeg
kan se at jeg har misforstået problemstillingen.

Hvis du har f.eks følgende datasæt:

dataID, DataEntry, UserID
1,'en kold is',1
2,'en varm is,1
3,'en varm kage',2

og søger på 'is+varm', hvilket søgeresultat regner du så med at
finde?



Henrik B. H. (05-05-2006)
Kommentar
Fra : Henrik B. H.


Dato : 05-05-06 08:19

Hej,

Er jeg helt på afveje :)

MVH
Henrik


"Henrik B. H." <info@beammeup.dk> skrev i en meddelelse
news:4459f9c7$0$67259$157c6196@dreader2.cybercity.dk...
> Hej Lars,
>
> I dit eksempel, skulle mit ønskede resultat være 1 resultat - userID #1,
> da vedkommende opfylder begge kriterier.
>
> MVH
> Henrik
>
>
> "Lars Hoffmann" <lars@intercambiodvd.com> skrev i en meddelelse
> news:1146745921.640900.129450@e56g2000cwe.googlegroups.com...
> Henrik B. H. wrote:
>
>> Jeg kan nu se at sql-strengen ikke har den ønskede effekt.
>> Jeg få stadigvæk ikke nogen resultater, når jeg søger på 2 kriterier. De
>> 2
>> kriterier er fordelt på to poster i databasen for samme bruger.
>
> Jeg troede netop at du ville lave en indskrænkende søgning, men jeg
> kan se at jeg har misforstået problemstillingen.
>
> Hvis du har f.eks følgende datasæt:
>
> dataID, DataEntry, UserID
> 1,'en kold is',1
> 2,'en varm is,1
> 3,'en varm kage',2
>
> og søger på 'is+varm', hvilket søgeresultat regner du så med at
> finde?
>
>



Ukendt (05-05-2006)
Kommentar
Fra : Ukendt


Dato : 05-05-06 08:42


"Henrik B. H." <info@beammeup.dk> wrote in message
news:445afc74$0$60780$157c6196@dreader1.cybercity.dk...
> Hej,
>
Hej Henrik,

På min søgeside får jeg søgekritrierne med nedenstående
("Rs.Sourse" er SQL sætningen og "SeachString" er tekst der viser
søgekriterier):

Rs.Source = "SELECT * FROM tblIncidentLog WHERE 1=1"
if request.form("irNumber") <> "" then
Rs.Source = Rs.Source & " and IncidentNo="& request.form("irNumber") &""
SeachString = SeachString & " &nbsp;Incident No=" &
request.form("irNumber")
end if
if request.form("irStatus") <> "" then
Rs.Source = Rs.Source & " and Status='"& request.form("irStatus") &"'"
SeachString = SeachString & " &nbsp;Status=" & request.form("irStatus")
end if
if request.form("irFrom") <> "" and request.form("irTo") <> "" then
Rs.Source = Rs.Source & " and incidentDate BETWEEN #"& reverseFrom &"# AND
#" & reverseTo &"#"
SeachString = SeachString & " &nbsp;Date Between " &
request.form("irFrom") & " and " & request.form("irTo")
end if
IF SeachString = " Where:<br>" Then
SeachString = ""
End IF

Rs.Source = Rs.Source & " ORDER BY " & "IncidentNo DESC"

M.v.h.
Henning




Henrik B. H. (05-05-2006)
Kommentar
Fra : Henrik B. H.


Dato : 05-05-06 09:04

Hej Henning, Tak for dit indlæg.

Jeg kan se at du benytter flere form-værdier i dit script.
Kan du hjælpe med at tilpasse det til mig?

MVH
Henrik



"Henning Smed" <henning snabela smeds.dk> skrev i en meddelelse
news:445b01d7$0$10871$d40e179e@nntp02.dk.telia.net...
>
> "Henrik B. H." <info@beammeup.dk> wrote in message
> news:445afc74$0$60780$157c6196@dreader1.cybercity.dk...
>> Hej,
>>
> Hej Henrik,
>
> På min søgeside får jeg søgekritrierne med nedenstående
> ("Rs.Sourse" er SQL sætningen og "SeachString" er tekst der viser
> søgekriterier):
>
> Rs.Source = "SELECT * FROM tblIncidentLog WHERE 1=1"
> if request.form("irNumber") <> "" then
> Rs.Source = Rs.Source & " and IncidentNo="& request.form("irNumber") &""
> SeachString = SeachString & " &nbsp;Incident No=" &
> request.form("irNumber")
> end if
> if request.form("irStatus") <> "" then
> Rs.Source = Rs.Source & " and Status='"& request.form("irStatus") &"'"
> SeachString = SeachString & " &nbsp;Status=" & request.form("irStatus")
> end if
> if request.form("irFrom") <> "" and request.form("irTo") <> "" then
> Rs.Source = Rs.Source & " and incidentDate BETWEEN #"& reverseFrom &"#
> AND #" & reverseTo &"#"
> SeachString = SeachString & " &nbsp;Date Between " &
> request.form("irFrom") & " and " & request.form("irTo")
> end if
> IF SeachString = " Where:<br>" Then
> SeachString = ""
> End IF
>
> Rs.Source = Rs.Source & " ORDER BY " & "IncidentNo DESC"
>
> M.v.h.
> Henning
>
>
>



Ukendt (05-05-2006)
Kommentar
Fra : Ukendt


Dato : 05-05-06 10:25


"Henrik B. H." <info@beammeup.dk> wrote in message
news:445b070c$0$60778$157c6196@dreader1.cybercity.dk...
> Hej Henning, Tak for dit indlæg.
>
> Jeg kan se at du benytter flere form-værdier i dit script.
> Kan du hjælpe med at tilpasse det til mig?
>
Hej Henrik

Du skal selvføgelig tilpasse formularens "name=" og databasens feltnavne og
til din DB og indsætte IF Then sætninger for alle søgekategorier,
Her er min formular:

form name="form1" method="post" action="irResult.asp">
<table width="565" border="0" cellspacing="4">
<tr>
<td width="131" valign="baseline" align="right" nowrap>Incident
Number</td>
<td width="418"><input name="irNumber" type="text" id="irNumber"></td>
</tr>
<tr>
<td valign="baseline" align="right" nowrap>Status</td>
<td>
<select name="irStatus" class="px11" id="irStatus">
<option value=""></option>
<% do %>
<% if RsStatus.Fields.Item("StatusCode").Value = irstatus then %>
<option name="<%=(RsStatus.Fields.Item("StatusCode").Value)%>"
selected><%=(RsStatus.Fields.Item("StatusCode").Value)%></option>
<% else %>
<option
name="<%=(RsStatus.Fields.Item("StatusCode").Value)%>"><%=(RsStatus.Fields.Item("StatusCode").Value)%></option>
<% end if %>
<% RsStatus.MoveNext %>
<% Loop while not RsStatus.EOF %>
</select> </td>
</tr>
<tr>
<td valign="baseline" align="right" nowrap>Date Interval </td>
<td>From:
<input type="text" name="irFrom" size="10"
onblur="check_date(this)">
To:
<input type="text" name="irTo" size="10" onblur="check_date(this)">
(dd-mm-yyyy) </td>
</tr>
<tr>
<td valign="baseline" align="right" nowrap>&nbsp;</td>
<td><input name="Submit" type="submit">
<input type="reset" name="Submit2" value="Clear"></td>

M.v.h.
Henning



Søg
Reklame
Statistik
Spørgsmål : 177548
Tips : 31968
Nyheder : 719565
Indlæg : 6408799
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste