webForumDet fria alternativet

Hjälp med att skriva en mysql-fråga.

Databaser & SQL

4 svar · 333 visningar · startad av mesup

Medlem sedan apr. 20067 inlägg
Frågan#1

Behöver hjälp med att få till en sql fråga som jag inte lyckas med.

Jag har en databas som innehåller modell och fabrikat och vill med endast en inparameter till sql frågan söka i båda fälten (tex. söka på "volvo v40").

Fabrikat innehåller ju "volvo" och Modell "v40".

Söker man dock bara på volvo ska den hitta alla volvo och söker man på v40 skall den hitta alla v40.

SELECT
OL.Fabrikat AS Fabrikat,
OL.Modell AS Modell, 
FROM
Objekt AS OL
WHERE
OL.Modell LIKE '% $SokText %' OR
OL.Modell LIKE '$SokText %' OR
OL.Modell LIKE '% $SokText' OR
OL.Modell LIKE '$SokText' OR
OL.Fabrikat LIKE '$SokText'

Detta var så långt jag lyckades.. Kanske är någon som kan hjälpa mig?
Nu fungerar det ju när man söker på antigen "volvo" eller "v40" men det blir fel när man söker på "volvo v40".

Medlem sedan dec. 20025 483 inlägg
#2

Jag kanske skulle göra så här: Konstruera WHERE-delen utanför DBMS och skicka sedan den som parameter till SQL-frågan. Så här typ:

whereSql = "WHERE 1 = 1"
words = split(searchString, " ")
for each word in words
  if word != ""
    whereSql = whereSql + " AND ("
    whereSql = whereSql + " OR OL.Modell LIKE '%" + word + "%'"
    whereSql = whereSql + " OR OL.Fabrikat LIKE '%" + word + "%'"
    whereSql = whereSql + ")"
  end
end
...
exec 'SELECT ... FROM ... ' + whereSql
Medlem sedan apr. 20067 inlägg
#3

Fungerar dock inte om jag söker på "volvo v40" då jag får alla volvo.

Vill ju bara ha "volvo v40" isåfall.

Medlem sedan dec. 20025 483 inlägg
#4

Se justerad kod ovan.

Medlem sedan apr. 20067 inlägg
#5

Vill tacka så hemsk mycket för hjälpen.. Fungerar utmärkt (om man ändrar WHERE 1 = 1).

Än en gång, tack för att du tog dig tid och hjälpte mig med detta problemet.

258 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)