Hej! En variant är att man inte splittar strängen utan söker på hela. Det ger inte så många träffar men de som dyker upp är troligtvis bra. Annars kan du göra så att man får välja mellan en AND- eller OR-sökning. Så här blev det: Jag vet inte om min kod är snyggare precis men eftersom du inte var nöjd med din så får du en variant här :-)splitta mening till array av ord, sökning i databas...
Är det någon som vet hur man kan dela upp en sträng till en array av ord?
Scenario:
Någon vill genom föra en sökning i en databas.
Denne skriver in orden:
cyckel blå växlar
i sökfältet.
Hur skall jag göra för att hitta relevanta poster i databasen?
Med de mest passande träffarna överst?
Min ide var att splitta meningen till ord och sedan konstruera SQL frågor typ:
select *from tbl where text like '%ord1%' or text like '%ord2' osv.
Problemet är att det kommer att bli en hel del orelevanta träffar på detta sätt.
Någon som har någon bättre ide på hur man kan lösa detta?
tack
PatrikSv: splitta mening till array av ord, sökning i databas...
Sv: splitta mening till array av ord, sökning i databas...
String words[] = strSearch.split(" ");
if(words.length != 0)
{
int i = 0;
for(i = 0; i < words.length;i++)
{
if(i>0)
strSQL += " OR ";
else
strSQL += " AND (";
strSQL += "text LIKE '%";
strSQL += words[i];
strSQL += "%'";
}
strSQL +=")";
}
Men jag är inte helt nöjd med denna lösningen....Sv: splitta mening till array av ord, sökning i databas...
<code>
String strSQL=" AND (text LIKE '%" + strSearch.Trim().Replace(" ","%' OR text LIKE '%") + "%')";
</code>
Observera att jag gjorde mitt exempel i C# (har ingen javakompilator) så du måste eventuellt ändra lite på syntaxet och hitta motsvarigheter till Trim och Replace. Min kod hanterar inte fallet när strSearch är tomt...