使用类似的字段名搜索MySQL字段

时间:2010-07-12 06:32:51

标签: php sql mysql

4 个答案:

答案 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_%';

然后使用“字段”列构建查询