Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Hjälp med sök-sqlfråga

Postades av 2002-11-21 11:14:59 - Robert Pehrsson, i forum sql-server/msde, Tråden har 6 Kommentarer och lästs av 750 personer

Hej. Jag har gjort en sökmotor som tar emot från flera inputfält. Alltså, man kan antingen fylla i alla eller bara de man känner för när man vill göra en sökning. Såhär ser den ut.

<code>

sql = " select * from foretag f "
sql = sql & " join bransch b on b.bransch_id = f.bransch_id "
sql = sql & " join lan l on l.lan_id = f.lan_id "
sql = sql & " join kommun k on k.kommun_id = f.kommun_id "
sql = sql & " where foretags_namn like '%"&Request.Form("foretagsnamn")&"%' "
sql = sql & " and kommun like '%"&Request.Form("kommun")&"%' "
sql = sql & " and lan like '%"&Request.Form("lan")&"%' "
sql = sql & " and bransch like '%"&Request.Form("bransch")&"%' "
sql = sql & " and foretags_sokord like '%"&Request.Form("sokord")&"%' "
sql = sql & " order by foretags_namn asc "

</code>

Detta funkar fint.
Grejen är att det sista inputfältet i sökformuläret heter "Valfritt sökord" vilket nu motsvarar den näst sista raden "and foretags_sokord like...".

Just nu söker ju det bara i "foretags_sokord". Jag vill ju såklart att "Valfritt sökord" skall söka i alla de andra fälten också, just därför att man skall kunna skriva vad som helst där.

Har provat med
<code>
sql = sql & " and foretags_sokord like '%"&Request.Form("sokord")&"%' or foretags_namn like '%"&Request.Form("sokord")&"%' or foretags_bransch like '%"&Request.Form("sokord")&"%' " osv....
</code>
Ja, massa "or". Men då får man inte längre några vettiga träffar. Hur skall man bära sig åt för att greja detta, någon som har erfarenhet?

Kanske skall man bygga sökmotorn på något annat sätt? Sökte som en galning på artiklar om detta, men kammade noll..

Mvh//Robert


Svara

Sv: Hjälp med sök-sqlfråga

Postades av 2002-11-21 11:34:58 - Andreas Hillqvist

Jag föreslår:
<code>
Dim strSQL
Dim strWhere

If Len(Request.Form("foretagsnamn")) > 0 Then
strWhere = strWhere & " AND foretags_namn like '%" & Request.Form("foretagsnamn") & "%'"
End If
If Len(Request.Form("kommun")) > 0 Then
strWhere = strWhere & " AND kommun like '%" & Request.Form("kommun") & "%'"
End If
If Len(Request.Form("lan")) > 0 Then
strWhere = strWhere & " AND lan like '%" & Request.Form("lan") & "%'"
End If
If Len(Request.Form("bransch")) > 0 Then
strWhere = strWhere & " AND bransch like '%" & Request.Form("bransch") & "%'"
End If
If Len(Request.Form("sokord")) > 0 Then
strWhere = strWhere & " AND (foretags_sokord like '%" & Request.Form("sokord") & "%' OR " & _
"foretags_namn like '%" & Request.Form("sokord") & "%' OR" & _
"kommun like '%" & Request.Form("sokord") & "%' OR" & _
"lan like '%" & Request.Form("sokord") & "%' OR" & _
"bransch like '%" & Request.Form("sokord") & "%')"
End If

If Len(strWhere) > 0 Then
strSQL = "SELECT *" & vbCrLf & _
"FROM foretag f JOIN" & vbCrLf & _
" bransch b ON b.bransch_id = f.bransch_id JOIN" & vbCrLf & _
" lan l ON l.lan_id = f.lan_id JOIN" & vbCrLf & _
" kommun k ON k.kommun_id = f.kommun_id" & vbCrLf & _
"WHERE " & Mid(strWhere, 5) & vbCrLf & _
"ORDER BY foretags_namn ASC"
Else
strSQL = "SELECT *" & vbCrLf & _
"FROM foretag f JOIN" & vbCrLf & _
" bransch b ON b.bransch_id = f.bransch_id JOIN" & vbCrLf & _
" lan l ON l.lan_id = f.lan_id JOIN" & vbCrLf & _
" kommun k ON k.kommun_id = f.kommun_id" & vbCrLf & _
"ORDER BY foretags_namn ASC"
End If
</code>


Svara

Sv: Hjälp med sök-sqlfråga

Postades av 2002-11-21 11:51:41 - Mikael Sand

En sätt att optimera det hela är att helt bygga upp sql-satsen beroende på om användaren fylt i villkor eller inte. Om personen lämnar ett fält tomt söker du på det i alla fall ock eftersom du har uttrycket like '%%' så blir det en ganska stor belastning.

Låt servern ta hand om det som du brukar, genom att inte ta med villkoret om fältet är tomt.

<code>
sql = "SELECT * FROM Kunder WHERE "
if txtKundNR.text <> "" then
if where = "" then
where = "kundnr like '%" & txtKundNr & "%'
else
where = " AND kundnr like '%" & txtKundNr & "%'
end if
end if
[...]

sql = sql & where
</code>

Du bygger alltså dynamiskt upp din wheresats. Om du dessutom behöver olika joins så kan du bygga upp dem dynamiskt också.

//Mikael.NET


Svara

Sv: Hjälp med sök-sqlfråga

Postades av 2002-11-21 11:58:46 - Robert Pehrsson

Tack till både Andreas och M. Sand. Detta verkar vara lösningen på mitt problem. Skall prova detta.

Robert


Svara

Sv: Hjälp med sök-sqlfråga

Postades av 2002-11-21 22:34:08 - Robert Pehrsson


<code>
Hej igen. Det funkar bra, men Andreas, jag undrar lite över denna koden:

& Mid(strWhere, 5) &

Den ligger precis i början av where. Vad gör den exakt i detta exemplet?

Robert
</code>


Svara

Sv: Hjälp med sök-sqlfråga

Postades av 2002-11-22 08:38:08 - Andreas Hillqvist

Det finns ett smart sätt och det finns ett annat sätt. Man kan kolla om det finns ett tidigare vilkor och i så fall lägga till ett och vilkor, som M. Sand sa:
<code>
If Len(strWhere) Then
strWhere = strWhere & " AND KundNr like '%" & txtKundNr & "%'
Else
strWhere = "KundNr like '%" & txtKundNr & "%'
End if
If Len(strWhere) Then
strWhere = strWhere & " AND KundNamn like '%" & txtKundNamn & "%'
Else
strWhere = "KundNr like '%" & txtKundNamn & "%'
End if
If Len(strWhere) Then
strWhere = strWhere & " AND KundAdress like '%" & txtKundAdress & "%'
Else
strWhere = "KundAdress like '%" & txtKundAdress & "%'
End if

</code>
Eller så är man smart. Lägger ett And framför alla vilkor och ta bort det första:
<code>
strWhere = strWhere & " AND KundNr like '%" & txtKundNr & "%'
strWhere = strWhere & " AND KundNamn like '%" & txtKundNamn & "%'
strWhere = strWhere & " AND KundAdress like '%" & txtKundAdress & "%'
strWhere = Mid$(strWhere, 5)
</code>
Så slipper man göra en jämförelse för varje vilkor.


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 617
27 953
271 709
5 748
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies