我有两张桌子 - '品牌'和'手机',如下面的方形图所示
http://sqlfiddle.com/#!2/6da79
brands(id, brand)
phones(id, brand_id, phone)
我基本上想知道如何最好地实现将执行以下操作的搜索 - 如果用户输入'Sony Ericcson' - 它会显示该品牌的所有手机..但是如果他们输入搜索词'Sony Ericsson Xperia “聪明地做一个LIKE并找回一部名为'Xperia P'的手机。
我可以理解逻辑 - 只是试图找到最佳的方法,以最小的数据库占用空间。
我的伪代码如下所示:
有人可以推荐最优化的方法吗?
答案 0 :(得分:2)
也许您应该使用全文搜索,就像
一样 select * from brands b join phones p
on p.brand_id = b.id
where match (b.brand, p.phone)
against ('sony ericsson xperia' IN BOOLEAN MODE)
但它只适用于myIsam引擎(:
答案 1 :(得分:1)
最简单的方法是加入两个表并连接品牌名称和电话名称。然后匹配这个连接的字符串:
select *
from brands
join phones on (phones.brand_id = brands.id)
where concat(brands.brand, ' ', phones.phone) like concat('your search string here','%')
这符合您的要求。尽管如此,请注意这仍是一个非常糟糕的搜索引擎。搜索字符串必须完全匹配。 '索尼'确实,'索尼爱立信','索尼爱立信Xperia',甚至'索尼E',但'索尼爱立信'(两个空白)没有,'索尼Xperia'也没有。
答案 2 :(得分:0)
你可能想要加入。尝试类似:
SELECT phones.id, phones.phone, brands.id, brands.brand
FROM brands, phones
WHERE brands.brand LIKE 'Sony Ericsson' AND brands.id = phones.brand_id;
您可以随时使用OR调整上述内容以搜索电话名称。
答案 3 :(得分:0)
http://sqlfiddle.com/#!2/fcb807
基本上按照建议使用以下方法 - 查看sqlfiddle并使用另一个表来执行与phone表的id链接的查询。我希望它有意义:-)再次感谢