Звучи като наистина търсите търсене в пълен текст, особено след като искате да претеглите думите.
За да използвате LIKE
, ще трябва да използвате множество изрази (по един на дума, на колона), което означава динамичен SQL. Не знам кой език използвате, така че не мога да дам пример, но ще трябва да създадете изявление, което е като това:
За „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%')
и т.н.
За съжаление, това наистина е единственият начин да го направите. Използването на пълнотекстово търсене би ви позволило да намалите критериите си до един за колона, но пак ще трябва изрично да посочите колоните.
Тъй като използвате SQL Server, ще рискувам да предположа, че това е въпрос за C#. Трябва да направите нещо подобно (ако приемем, че създавате SqlCommand
или DbCommand
възразете сами; ако използвате ORM, всички залози са изключени и вероятно няма да питате това така или иначе):
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();