2010-07-12 85 views
0

mysql和php的新手,请原谅任何明显的愚蠢行为!搜索具有相似字段名称的MySQL字段

其中一个mysql表具有类别字段,从类别表中索引。该类别中的各被命名为category_1,category_2,category_3等

我假设我不能使用通配符来搜索这些类别,如:

'SELECT * FROM products_table WHERE category_% ="furniture"' 

,因为我得到一个语法错误。

我该如何做到最好?

TIA。

回答

3

如果你必须坚持这一模式,你就必须列出所有列

Where 'furniture' In (category_1, category_2, category_3) 

或动态创建查询。


最好的解决方案是标准化你的模型。

定义另一个表(例如categories)包含所有类别和另一个表(例如product_categories)包含的产品和类别相匹配的IDS:

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' 
+0

谢谢,我相信这是最好的解决方案。我真的很努力地找到有用的教程来介绍如何设置这样的数据库。正如我所说,我对mysql很陌生。 我已经用了4天的时间将我的头撞向了mysql的砖墙。 我有严重的头痛。 – circey 2010-07-12 07:07:34

1

这不是应该工作的东西。数据库被设计用于定位存储在满足定义的约束的定义的结构中的信息,而不用于查找将找到一些信息的约束。表索引不是为你想要做的。

您必须写出所有列名称或使用存储过程来生成动态SQL查询。

您尝试使用的这一事实强烈表明您的数据库模式应该重新评估。具体而言,如果产品和类别之间存在多对多关系,则应该有三个表格:产品,类别和产品类别。

1

你必须指定当然所有的字段名即ie。

where category_1 = ... OR category_2 = ... etc. 

但是,如果您使用这种类型的列,那么您的模型似乎是错误的。要为每个产品定义多个类别,您可以创建一个产品,一个类别和一个链接表。链接表将包含指定产品属于哪个类别的产品和类别ID(因此每个产品可以有多个类别)。

0

使用一个查询,提取列名

SHOW COLUMNS FROM db.table WHERE Field like 'category_%'; 

然后使用“字段”列来建立您的查询

相关问题