答案 0 :(得分:3)
如果您必须坚持使用该模型,则必须列出所有列
Where 'furniture' In ( category_1, category_2, category_3 )
或动态创建您的查询。
最好的解决方案是规范您的模型。
定义包含所有类别的另一个表格(例如categories
),以及包含匹配的产品和类别ID的另一个表格(例如product_categories
):
products ( id, ... )
categories ( id, name )
product_categories ( product_id, category_id )
这将允许您搜索具有特定类别的所有产品:
Select p.id
From categories c
Join product_categories pc On ( pc.category_id = c.category_id )
Join products p On ( p.product_id = pc.product_id )
Where c.name = 'furniture'
答案 1 :(得分:1)
这不应该起作用。数据库被设计用于定位存储在满足定义的约束的定义结构中的信息,而不是用于定位将找到某些信息的约束。表索引不是为您要做的事情而构建的。
您必须写出所有列名或使用存储过程来生成动态SQL查询。
您尝试执行此操作的事实强烈表明您的数据库架构应该重新评估。具体而言,如果产品和类别之间存在多对多关系,则应该有三个表:产品,类别和products_categories。
答案 2 :(得分:1)
您必须指定所有字段名称,即。
where category_1 = ... OR category_2 = ... etc.
但是如果你使用这种列,那么你的模型似乎是错误的。要为每个产品定义多个类别,您需要创建产品,类别和链接表。链接表将仅包含指定产品所属类别的产品和类别ID(因此每个产品可以有多个类别)。
答案 3 :(得分:0)
使用一个查询来提取列名
SHOW COLUMNS FROM db.table WHERE Field like 'category_%';
然后使用“字段”列构建查询