使用下拉列表添加显示和更新mysql字段

时间:2011-11-13 18:06:02

标签: php mysql forms

我想在mysql数据库字段中存储一组类别。该字段为varchar,类别将以逗号分隔的方式输入。在添加或更新表单中加载时,应该有一个下拉多项选择类别列表和一个字段,用于输入新的类别或一组以逗号分隔的类别。

所以这里的问题是如何:

  1. 从数据库中提取类别列表作为列
  2. 使下拉列表只显示每个类别中的一个,即使每行中都有多个类别,例如:

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

    ,显示的下拉列表应如下所示:

    entertainment
    news
    religion
    music
    
  3. 除了下拉列表中的选择外,还允许用户向数据库添加新类别。

  4. 可能有更好的方法可以做到这一点,但由于我对php / mysql不是很有经验,所以我不确定如何。我尝试将类别列添加到数据库中作为类型SET或在PHPMyAdmin中键入ENUM但是无论我做了什么我都得到错误1064,所以我放弃并决定只使用逗号分隔文本。我相信我需要使用explode和implode php函数来存储这些数据。目前,只有一个类别的文本字段,但这不会保护用户免受可能由于现有类别的拼写错误而导致出现额外类别的拼写错误。

1 个答案:

答案 0 :(得分:0)

嗯,我猜你在数据库模式上错了。这是典型的1对n关系,所以通常你应该拥有的是:

[分类表]

  • 的categoryId
  • 名称
  • ...(其他领域)

[内容表](包含要分类的数据的表)

  • 内容识别
  • 名称
  • ...(其他领域)

你有一张桌子加入这两个并允许多种关系。

[Content_Belongs_To_Category表]

  • 内容识别
  • 的categoryId

现在,您在“类别”表上执行选择以获取下拉列表所需的列表,并且对于内容所属的每个类别,您可以在关系表中添加一行。

您最终可以使用[Categories Table]和[Content_Belongs_To_Category Table]加入[Content Table]以获取项目所属的类别列表(作为数组,或者您可以使用GROUP_CONCAT将它们作为逗号分隔的字符串)

可能在我的答案中可能有太多未知术语,但它应该让你开始整理(正确:))。

编辑:示例SQL语句

  • 获取所有类别

SELECT * FROM Categories

  • 获取内容所属的类别

SELECT * FROM Content_Belongs_To_Category cbtc INNER JOIN类别c ON cbtc.categoryId = c.categoryId WHERE cbtc.contentId =

  • 将内容和类别作为字符串获取

选择co.contentId,min(co.name)作为名称,group_concat(c.name)作为类别 来自内容公司 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