2011-11-13 53 views
0

我想將一組類別存儲在mysql數據庫字段中。該字段是varchar,分類將以逗號分隔。在加載或更新表單中加載時,應該有一個下拉選項的類別列表和一個字段來輸入一個新類別或一組逗號分隔的類別。用下拉菜單添加顯示和更新mysql字段

所以這裏的問題是如何:

  1. 提取物類別列表從數據庫
  2. 列使下拉只顯示每個類別中的一個,儘管每一行都會有多個類別的它,例如:

    row1: category: entertainment,news,music 
    row2: category: news,religion,entertainment 
    row3: category: news,music,religion 
    

    和顯示的下拉列表中應該是這樣的:

    entertainment 
    news 
    religion 
    music 
    
  3. 除了在下拉列表中的選擇外,還允許用戶向數據庫添加新類別。

也許有更好的方法來做到這一點,但由於我不是很有經驗的PHP/MySQL,我不知道如何。我嘗試將類別列添加到數據庫中,類型爲SET或在PHPMyAdmin中鍵入ENUM,但無論我做了什麼,我都會收到錯誤1064,因此我放棄了並決定使用逗號分隔的文本。我相信我需要使用explode和implode php函數來存儲這些數據。目前,只有類別的文本字段,但這不會保護用戶免受拼寫錯誤的影響,從而可能導致由於現有類別的拼寫錯誤而導致出現額外的類別。

回答

0

嗯,我猜你錯了數據庫模式。這是一個典型的1對n的關係,所以通常你應該擁有的是一樣的東西:

[類別表]

  • 的categoryId
  • ...(等領域)

[內容表(包含數據的表被分類)

  • 內容識別
  • ...(等領域)

而且你有一個表,加入這兩個,並允許多個關係。

[Content_Belongs_To_Category表]

  • 內容識別
  • 的categoryId

所以,現在你對分類表進行選擇,以獲得您所需要的下拉列表,併爲每個類別內容屬於你在關係表中添加一行。

您最終可以通過[Categories Table]和[Content_Belongs_To_Category Table]加入[Content Table]以獲取項目所屬類別的列表(作爲數組,或者可以使用GROUP_CONCAT將它們作爲逗號分隔的字符串)

可能在我的回答中可能有太多未知的術語,但它應該讓你開始把它整理出來(正確:))。

編輯:樣本SQL語句

  • 獲取所有類別

SELECT * FROM類別

  • 獲取該內容屬於

SELECT * FROM類別Content_Belongs_To_Category c BTC INNER JOIN分類C ON cbtc.categoryId = c.categoryId WHERE cbtc.contentId =

  • 獲取內容和類別作爲字符串

SELECT co.contentId,分鐘(co.name)如姓名,GROUP_CONCAT(c.name)作爲類別 FROM內容共 LEFT OUTER JOIN Content_Belongs_To_Category CBTC ON cbtc.contentId = co.contentId LEFT OUTER JOIN分類C ON cbtc.categoryId = c.categoryId GROUP BY co.contentId

+0

你能幫我解決一些假設的mysql語句來創建這種關係嗎? – alphablender

+0

你走了。 (對不起,如果有錯別字,我只寫了它們,還沒有嘗試過) – mobius

+0

好的,所以我已經創建了兩個表格。我是否需要填充連接表,「content_belongs_to_category」以某種方式?或者這是否以某種自動方式發生?還有在連接表上使用auto_increment的問題,我需要這樣做,還是某種索引/主鍵等? – alphablender