我有一家手表网上商店。它有一个搜索过滤器。过滤的标准之一是表身的材料。它有很多独特的价值。例如:“钢”、“钢镀金”、“钢镀金”。
我试图通过创建一个 sql LIKE 请求来过滤手表,以过滤钢体、金体的手表。但是,当搜索带有金色机身的手表时,它也会给我镀金的钢表,因为它包含“金”这个词。
你能提出一个好的解决方案来解决这个问题吗?
到目前为止,我尝试了这个 sql 语句:
SELECT * FROM `watches` WHERE `material` LIKE "%gold%"
如果我这样做,我将创建一个名为“Material”的表并为每种可用材料添加一条记录,然后将材料 ID 存储在手表表中而不是单词中。(这有很多更好的原因。)
材料表:
id - Material
1 - Gold
2 - Gold Plated
3 - Silver
4 - Steel with Gold
然后在您的搜索中,您将允许用户选择他们感兴趣的材料,您的 sql 将如下所示:
Select * from Watches where Material IN (1,4);
这将带来一块由金或钢制成的手表。您的搜索会更快。
$criterium = "gold";
$query = mysql_query("SELECT * FROM watches WHERE material = '$criterium'");
它应该可以解决您的问题。还要检查 SQL LIKE 条件以进行进一步查询