webForumDet fria alternativet

strul med sökscript...

7 svar · 273 visningar · startad av G8

G8Medlem sedan jan. 20011 213 inlägg
#1

Jag använder mig av Emissions sökscript , dock med en liten modifikation.

Har en dropdown meny där man kan välja vad man vill söka efter, och koden blir då:

alt = Request.Form("alt")
'grunddelarna i frågan beroende på valt alternativ
IF alt = "news" then
mSQL="SELECT nyheter.id, nyheter.rubrik, nyheter.artikel, nyheter.skribent, users.nick FROM nyheter INNER JOIN users ON nyheter.skribent = users.id WHERE " 
mWhere="artikel LIKE '%%' OR rubrik LIKE '%%' OR skribent LIKE '%%' OR users.nick LIKE '%%'"
Page="News"
elseif alt = "users" then
mSQL="SELECT users.id, klubbar.namn, regioner.namn, users.nick, users.city, users.info FROM users INNER JOIN klubbar ON klubbar.id = users.klubbid INNER JOIN regioner ON users.regionid = regioner.id WHERE " 
mWhere="users.nick LIKE '%%' OR klubbar.namn LIKE '%%' OR users.info LIKE '%%' OR regioner.namn LIKE '%%' OR users.city LIKE '%%'"
Page="Users"
elseif alt = "clubs" then
mSQL="SELECT klubbar.id, klubbar.namn AS klubbnamn, regioner.namn, klubbar.regionid, sporter.namn, idrotter.namn FROM klubbar INNER JOIN sporter ON klubbar.sportid = sporter.id INNER JOIN idrotter ON idrotter.sportid = klubbar.sportid INNER JOIN regioner ON klubbar.regionid = regioner.id WHERE "
mWhere="klubbar.namn LIKE '%%' OR sport.namn LIKE '%%' OR regioner.namn LIKE '%%' OR idrotter.namn LIKE '%%'"
Page="Clubs"
end if

Jag skriver sedan ut med hjälp av:

<%
If rs.EOF Then
Response.write("<p>Sorry, no results were found for this search.<p>It may help to<br><ul><li>Check your spelling</li><br><li>Enter a less specific phrase</li><br><li>Enter a more specific phrase, using i.e.""AND NOT""</li></lu>")
Else
%>
                  <p> 
                    <%
Do until rs.EOF
IF Page = "News" then%>
<a href="news.asp?NID=<%=rs("Id")%>"><%=rs("Rubrik")%></a><br>
<%
Elseif Page = "Users" then%>
<a href="userinfo.asp?userid=<%=rs("Id")%>"><%=rs("nick")%></a><br>
<%
Elseif Page = "Clubs" then%>
<a href="clubinfo.asp?clubid=<%=rs("Id")%>"><%=rs("klubbnamn")%></a><br>
<%
end if
rs.MoveNext
Loop

End If
rs.close
set rs=nothing
Connection.close
set Connection=nothing
%>

Det funkar jättebra om man söker på nyheter eller users, men så fort man söker på klubbar så skriver den ut samma sak flera gånger. Det enda jag kan tänka mig är att den hittar söksträngen i flera tabeller och därför loopar igenom den... Jag vill dock begränsa så att den bara skriver ut resultatet en gång, även om den hittar söksträngen i flera tabeller..

Finns det nått sätt att begränsa detta?

Mvh

//G8

G8Medlem sedan jan. 20011 213 inlägg
#2

Vet inte riktigt varför, men det verkar som om det har löst sig, tog bort klubbar.regionid samt bytte idrotter.sportid mot idrotter.id...

Ser inte riktigt hur det skulle påverka så att den skriver ut två av varje.. Men eftersom jag hittade det till slut så spelar det ingen större roll :)

//G8

G8Medlem sedan jan. 20011 213 inlägg
#3

Btw: hur ska jag begränsa antalet max resultat den ska skriva ut?

Tänkte jag kunde använda mig av nått i stil med

mSQL="SELECT klubbar.id, klubbar.namn AS klubbnamn, regioner.namn, klubbar.regionid, sporter.namn, idrotter.namn FROM klubbar INNER JOIN sporter ON klubbar.sportid = sporter.id INNER JOIN idrotter ON idrotter.sportid = klubbar.sportid INNER JOIN regioner ON klubbar.regionid = regioner.id WHERE "
mWhere="klubbar.namn LIKE '%%' OR sport.namn LIKE '%%' OR regioner.namn LIKE '%%' OR idrotter.namn LIKE '%%' [B]ORDER BY klubbar.namn asc LIMIT 50[/B]"

Får då följande felmeddelande:
[TCX][MyODBC]You have an error in your SQL syntax near 'ORDER BY klubbar.namn asc LIMIT 50)' at line 1

...?

//G8

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Du får lägga till limit efter det att man har byggt where-villkoret

mQuery=mSQL & mQuery & join(mNotArr," AND NOT ") & " limit 50"
G8Medlem sedan jan. 20011 213 inlägg
#5

Ok, får då följande felmeddelande...

ser ut som om en parantes har smugit sig in..

Microsoft OLE DB Provider for ODBC Drivers fel '80040e09'

[TCX][MyODBC]You have an error in your SQL syntax near 'ORDER BY klubbar.namn desc) limit 50' at line 1

/search.asp, rad 89

//G8

kb00obfrMedlem sedan nov. 200229 inlägg
#6

ska det inte vara

mQuery=mSQL & mQuery & join(mNotArr," AND NOT )" & " limit 50"

dvs byta plats på " och )

LarsG skrev:

Du får lägga till limit efter det att man har byggt where-villkoret

mQuery=mSQL & mQuery & join(mNotArr," AND NOT ") & " limit 50"
G8Medlem sedan jan. 20011 213 inlägg
#7

Nope, så skulle det inte vara ;)

Det är ORDER BY satsen där uppe som ställer till det, måste flytta ner den till samma rad som jag har LIMIT på verkar det som..

Mvh

//G8

G8Medlem sedan jan. 20011 213 inlägg
#8

Gjorde alltså såhär:

if mQuery<>"" and ubound(mNotArr) > -1 then mQuery=mQuery & " AND NOT "
mQuery=mSQL & mQuery & join(mNotArr," AND NOT ")
if page = "News" then
mQuery=mQuery & " ORDER BY nyheter.rubrik asc limit 100"
elseif page = "Users" then
mQuery=mQuery & " ORDER BY users.nick asc limit 100"
else
mQuery=mQuery & " ORDER BY klubbar.namn asc limit 100"
end if
'frågan är klar! Ligger i mQuery

set rs=Connection.execute(mQuery)

Tack för hjälpen! :)

//G8

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)