2010-07-12 87 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_%'; 

然後使用「字段」列來建立您的查詢

相關問題