Det låter som att du är på riktigt letar efter fulltextsökning, särskilt eftersom du vill vikta orden.
För att använda LIKE
måste du använda flera uttryck (ett per ord, per kolumn), vilket betyder dynamisk SQL. Jag vet inte vilket språk du använder, så jag kan inte ge ett exempel, men du måste skapa ett uttalande som är så här:
För "Hula Hoops":
where (ProductName like '%hula%' or ProductName like '%hoops%')
and (Description like '%hula%' or Description like '%hoops%')
and (ShortName like '%hula%' or ShortName like '%hoops%')
etc.
Tyvärr är det egentligen det enda sättet att göra det på. Genom att använda fulltextsökning kan du minska dina kriterier till ett per kolumn, men du måste fortfarande ange kolumnerna explicit.
Eftersom du använder SQL Server, kommer jag att gissa att detta är en C#-fråga. Du måste göra något liknande (förutsatt att du konstruerar SqlCommand
eller DbCommand
invända mot dig själv; om du använder en ORM är alla satsningar avstängda och du skulle förmodligen inte fråga detta ändå):
SqlCommand command = new SqlCommand();
int paramCount = 0;
string searchTerms = "Hula Hoops";
string commandPrefix = @"select *
from Products";
StringBuilder whereBuilder = new StringBuilder();
foreach(string term in searchTerms.Split(' '))
{
if(whereBuilder.Length == 0)
{
whereBuilder.Append(" where ");
}
else
{
whereBuilder.Append(" and ");
}
paramCount++;
SqlParameter param = new SqlParameter(string.Format("param{0}",paramCount), "%" + term + "%");
command.Parameters.Add(param);
whereBuilder.AppendFormat("(ProductName like @param{0} or Description like @param{0} or ShortName like @param{0})",paramCount);
}
command.CommandText = commandPrefix + whereBuilder.ToString();