Som ni märker är det en rätt avancerad sökning med många valbara alternativ. SQL-frågan kan se ut på många olika sätt beroende på vad användaren har valt i formuläret.
Nu undrar jag: hur lägger man upp en dynamisk SQL-fråga på ett lämpligt sätt. Man får på något sätt kolla vilka fält som innehåller någon data och sedan anpassa WHERE i sql-frågan med en if-sats eller hur går man tillväga på smartaste sätt?
Man får på något sätt kolla vilka fält som innehåller någon data och sedan anpassa WHERE i sql-frågan med en if-sats
Jo, så lär du få göra. Då du har ganska specifika sökvillkor i vissa fall ser jag att det är svårt att automatisera.
Du kanske skulle ha ett val som säger om man vill söka med and eller or, dvs om alla villkor skall vara uppfyllda eller om det är tillräckligt att ett villkor uppfylls.
Sen kan du fundera på hur du sorterar resultatet. Skall det vara valbart eller skall det baseras på vilka kolumner man ställer villkor på?
Om du använder fritextsökning med like '%nisse%' så kommer det inte att bli speciellt effektivt, då man inte kan utnyttja index vid sökningen.
Jo, så lär du få göra. Då du har ganska specifika sökvillkor i vissa fall ser jag att det är svårt att automatisera.
Vilka sökvilkor tycker du är specifika?
Du kanske skulle ha ett val som säger om man vill söka med and eller or, dvs om alla villkor skall vara uppfyllda eller om det är tillräckligt att ett villkor uppfylls.
Jag hade tänkt att det var valfritt att välja vilka man vill använda. Sedan kolla med ISNULL eller något i den stilen vilka användaren har valt.
Sen kan du fundera på hur du sorterar resultatet. Skall det vara valbart eller skall det baseras på vilka kolumner man ställer villkor på?
Jag hade tänkt att man ska kunna välja i en dropdown vilket man vill sortera efter.
Om du använder fritextsökning med like '%nisse%' så kommer det inte att bli speciellt effektivt, då man inte kan utnyttja index vid sökningen.
Från början var jag inne på att använda söksyntaxen +, - och " ". Men eftersom jag inte har stöd för reg exp lade jag ner den planen.
Jag får gå och fundera lite på hur jag ska gå tillväga. Just nu verkar det vara idetorka, men ideerna brukar komma under hundpromenaderna :)
Det jag menade med specifika var att du har lite olika typer av villkor, ibland text, ibland numeriskt och även att det skall ligga inom ett intervall.
Min tanke med and/or var att man skulle kunna säga
Jag vill söka information där (ras = 'hardangerspets' and ort = 'mullsjö') eller
(ras = 'hardangerspets' or ort = 'mullsjö')
Isnull är väl inte så lämpligt att använda i detta sammanhang snarare
where = ""
if request.form("ort") <> "" then
if len(where) = 0 then
where = "where ort = '" & request.form("ort") & "'"
else
where = "and ort = '" & request.form("ort") & "'"
end if
end if
if request.form("ras") <> "" then
if len(where) = 0 then
where = "where ras = '" & request.form("ras") & "'"
else
where = "and ras = '" & request.form("ras") & "'"
end if
end if
'etc
Att ha stöd för +sökord och -sökord i fritextsökning har inget med regexp att göra, det är bara lite lämpliga kombinationer av like och not like och parenteser.
Att ha stöd för +sökord och -sökord i fritextsökning har inget med regexp att göra, det är bara lite lämpliga kombinationer av like och not like och parenteser.
menar du att du splittar resultatet från request.form("fritext") innan då? Min tanke med reg exp var att kolla var och hur förekomsten av + och minus.
regexp kom i version 5 och chilliasp är bara uppe i 4.xxxx någonting. Så det dröjer nog ett tag till innan jag får stöd för det. Men å andra sidan är det bara forumet jag ska köra ASP på, pga att jag giter inte bygga ytterliggare ett nytt i JSP.
Nu har jag bestämt mig hur jag ska göra. I min medlemslista har jag lagt till en bra sorteringsfunktion där man kan sortera efter Ort, Ras, Län mm.
Och sedan i sökfunktionen kan man söka på inlägg gjort av ett speciellt användaramn eller om man vill söka i Subject eller hela meddelandet.
Hitintills har jag kommit så här långt:
Sub DoSearch
Dim RSSearch
Dim sSQL
[b]sSQL = "SELECT * FROM "[/b]
Select Case Request.QueryString("search_in")
Case "Subject"
sSQL = sSQL & "AND Subject LIKE '%" & Request.QueryString("search_text") & "%'"
Case "Messages"
sSQL = sSQL & "AND Comment LIKE '%" & Request.QueryString("search_text") & "%'"
Case "Username"
sSQL = sSQL & "AND req_Username LIKE '%" & Request.QueryString("search_text") & "%'"
Case "exact_member_name"
sSQL = sSQL & "AND AnvId = " & Request.QueryString("uid")
End Select
If Not IsBlank(Request.QueryString("ForumId")) Then sSQL = sSQL & " AND F_ID = " & Request.QueryStrin("ForumId")
sSQL = sSQL & " ORDER BY ForumName, Subject, req_Username"
Set RSSearch = objDB.Execute(sSQL)
Nu till problemet, jag har 3 tabeller som jag vill ha data ifrån. Jag har provat med diverse olika joinar, inner, right, left outer men får inte rätt på det.
Vad är det för skillnad på dessa joinar och finns det något annat sätt att gå till väga?
Jag tittade på ett annat forum hur de gjort, och de hade skrivit:
sSQL = "SELECT * " & _
" FROM Forums, Messages, Members, Topics WHERE F_ID = FORUM_ID AND R_Posted_By = M_ID AND TOPIC_ID = T_ID "
select *
from inlagg as i ,svar as s,profil as p
where i.messid = s.svar_messid
and s.svar_anvid = p.anvid
and i.subject = 'pomenadens betydelse för kodning'
t.ex.
Jag tror (ändå, även om jag inte sagt det tidigare i just den här tråden) att du behöver union och det finns i den nya (beta-) versionen.