如果每個輸入關鍵字都在單獨的變量中,則可以執行此操作。如果您將關鍵字用逗號分隔的空格代替:
select . . .
where find _in_set($keyword1, keywords) > 0 or
find _in_set($keyword2, keywords) > 0 or
find _in_set($keyword3, keywords) > 0
order by (find _in_set($keyword1, keywords) > 0 +
find _in_set($keyword2, keywords) > 0 +
find _in_set($keyword3, keywords) > 0
);
用空格,你可以這樣做:
where concat(' ', $keywords, ' ') like concat(' %', $keyword1, '% ') or
concat(' ', $keywords, ' ') like concat(' %', $keyword2, '% ') or
concat(' ', $keywords, ' ') like concat(' %', $keyword3, '% ')
order by concat(' ', $keywords, ' ') like concat(' %', $keyword1, '% ') +
concat(' ', $keywords, ' ') like concat(' %', $keyword2, '% ') +
concat(' ', $keywords, ' ') like concat(' %', $keyword3, '% ')
額外的空間是防止「紅」從匹配「重做」。
但是,你不應該在這樣的列表中存儲關鍵字。你應該有一個關聯/聯結表。這樣的表格將具有ProductId
的列和keyword
的列。多個關鍵字將存儲在不同的行上。有了這張表,查詢,簡直是:
from ProductKeywords pk
where pk.keyword in ($keyword1, $keyword2, $keyword3)
group by pk.ProductId
order by count(*) desc;
另一個優點這個疑問的是,它可以在ProductKeywords(keyword)
,你不能與你的存儲關鍵字的方法做採取指數的優勢。
您可能需要執行全文搜索https://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html –
您是否考慮過正常化? – Strawberry