【发布时间】:2010-12-22 20:56:06
【问题描述】:
这个问题的各种化身以前在这里被问过,但我想我会再试一次。
我的数据库布局很糟糕。单个实体(小部件)被拆分为两个表:
CREATE TABLE widgets (widget_id int(10) NOT NULL auto_increment)
CREATE TABLE widget_data (
widget_id int(10),
field ENUM('name','size','color','brand'),
data TEXT)
这不是那么理想。如果想找到特定名称、颜色和品牌的小部件,我必须在 widget_data 表上进行三向连接。于是我转为合理的表类型:
CREATE TABLE widgets (widget_id int(10) NOT NULL auto_increment,
name VARCHAR(32),size INT(3),color VARCHAR(16), brand VARCHAR(32))
这使大多数查询变得更好。但它使搜索变得更加困难。过去,如果我想在小部件中搜索“%black%”,我只会SELECT * FROM widget_data WHERE data LIKE '%black%'。这将为我提供所有黑色小部件实例,或由 blackwell 工业或其他任何东西制造。我什至会确切地知道哪个字段匹配,并可以将其显示给我的用户。
如何使用新的表格布局执行类似的搜索?我当然可以做WHERE name LIKE '%black%' OR size LIKE '%black%'...,但这看起来很笨拙,而且我仍然不知道哪些字段匹配。我可以为要匹配的每一列运行一个单独的查询,这将为我提供所有匹配项以及它们的匹配方式,但这会影响性能。有什么想法吗?
【问题讨论】:
标签: mysql search keyword multiple-columns