2013-01-21 74 views
0

我有這個項目的項目和一個類別。類別有一個ID。我需要將物品的類別ID放在DB中,但物品可以有2,3個或更多類別。我需要做什麼?

在項目表中創建一個新的單元格名稱「類別」,並將類別標識符用逗號(7,4,8 ...)?如果這樣,那麼如何在PHP中按類別搜索?MySQL按特殊ID搜索

+1

在開始之前,您必須閱讀關於'RDBMS'概念。 –

+1

那麼,根據您使用的引擎,您可以創建帶有類別的表並使用外鍵 – Darvex

回答

3

如果我理解你的問題,你有一個項目可以有多個類別。如果是這種情況,則不要將多個類別存儲在同一列中。

你想設置你的表以這種方式:

create table item 
(
    id int, (PK) 
    name varchar(10) 
); 

create table category 
(
    id int, (PK) 
    name varchar(10) 
); 

create table item_category 
(
    item_id int, (FK) 
    category_id int (FK) 
); 

這將讓你有你在不同的表項和類別,然後使用一個連接表,讓你的項目有多個類別。

如果你有上面的表格下面的示例數據:

insert into item values 
    (1, 'item 1'), 
    (2, 'item 2'); 

insert into category values 
    (1, 'category 1'), 
    (2, 'category 2'); 

insert into item_category values 
    (1, 1), 
    (2, 1), 
    (2, 2); 

然後將查詢將類似於此:

select i.id item_id, 
    i.name ItemName, 
    c.id CategoryId, 
    c.name CategoryName 
from item i 
left join item_category ic 
    on i.id = ic.item_id 
left join category c 
    on ic.category_id = c.id 

SQL Fiddle with Demo。其結果如下:

| ITEM_ID | ITEMNAME | CATEGORYID | CATEGORYNAME | 
-------------------------------------------------- 
|  1 | item 1 |   1 | category 1 | 
|  2 | item 2 |   1 | category 1 | 
|  2 | item 2 |   2 | category 2 | 
+0

這是非常大的變體,3個表不好。我喜歡以前的變種和外鍵。但它是一個變量。 – Berny

+0

@ user1821941爲什麼3桌不好?然後你有他們各自的表中列出的類別和項目一次。根據需要,您將在連接表中有多個條目。 – Taryn