Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用下拉菜单添加显示和更新mysql字段_Php_Mysql_Forms - Fatal编程技术网

Php 使用下拉菜单添加显示和更新mysql字段

Php 使用下拉菜单添加显示和更新mysql字段,php,mysql,forms,Php,Mysql,Forms,我想在mysql数据库字段中存储一组类别。该字段为varchar,类别将以逗号分隔输入。在添加或更新表单中加载时,应该有一个类别的下拉多选列表和一个字段,用于输入新类别或一组以逗号分隔的类别 因此,这里的问题是如何: 从数据库中将类别列表提取为列 使下拉列表仅显示每个类别中的一个,即使每行中有多个类别,例如: row1: category: entertainment,news,music row2: category: news,religion,entertainment row3: cat

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

因此,这里的问题是如何:

  • 从数据库中将类别列表提取为列
  • 使下拉列表仅显示每个类别中的一个,即使每行中有多个类别,例如:

    row1: category: entertainment,news,music
    row2: category: news,religion,entertainment
    row3: category: news,music,religion
    
    显示的下拉列表应如下所示:

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


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

    我猜您在数据库架构上错了。这是一种典型的1对n关系,因此通常您应该具有以下内容:

    [类别表]

    • 类别
    • 名字
    • 。。。(其他领域)
    [内容表](包含要分类的数据的表)

    • 内容ID
    • 名字
    • 。。。(其他领域)
    您有一个表来连接这两个表并允许多个关系

    [内容属于类别表]

    • 内容ID
    • 类别
    因此,现在您可以在Categories表上执行select,以获得下拉列表所需的列表,并为内容所属的每个类别向关系表中添加一行

    最后,您可以将[Content Table]与[Categories Table]和[Content\u Attributes\u To\u Category Table]连接起来,以获取项目所属类别的列表(作为数组,或者您可以使用GROUP\u CONCAT将其作为逗号分隔的字符串)

    也许我的答案中有太多的未知术语,但这应该会让你开始理清它(正确:)

    编辑:示例SQL语句

    • 获取所有类别
    从类别中选择*

    • 获取内容所属的类别
    选择*从内容\u属于\u类别cbtc cbtc.categoryId=c.categoryId上的内部联接类别c 其中cbtc.contentId=

    • 以字符串形式获取内容和类别
    选择co.contentId,min(co.name)作为名称,group_concat(c.name)作为类别 来自内容公司 左外部联接内容属于cbtc.contentId=co.contentId上的cbtc类别 cbtc.categoryId=c.categoryId上的左外部联接类别c
    groupby co.contentId

    你能帮我用一些假设的mysql语句来创建这种关系吗?好了。(抱歉,如果有拼写错误,我只是写了,还没有试过)好的,我已经创建了两个表,如您所述。我是否需要以某种方式填充联接表“content\u属于\u类别”?或者这是以某种自动的方式发生的?还有一个问题是在联接表上使用auto_increment,我是否需要这样做,或者使用某种索引/主键等?显然,对于内容所属的每个类别,您都需要在“属于”表中添加一行。我假设categoryId和contentId都是每个表上的主键,它们一起构成了表上的主键。我想你应该读一些数据库理论,难道你没有看到我的第一篇文章中说我在php/mysql方面的经验是有限的吗?我在星期一开始一份新工作,并试图完成这个项目,所以被告知RTFM是非常没有帮助的,然而,你的其他意见是非常有帮助的,所以我会原谅你。而且,将两个字段都设置为表中的主键似乎是不可能的,也没有任何意义。