我有一个问题,我在数据库中有两个表,一个是类别(cat_id和cat name),另一个是笑话(joke_id和笑话)。我希望用户能够选择一个类别并描述他们的笑话,然后将其输入到数据库中,并引用该笑话的类别,以便可以在特定类别页面上描绘笑话。到目前为止,我可以将笑话上传到数据库,但我还是无法将笑话上传到特定类别。
这是笑话表的代码
CREATE TABLE `category` (
`category_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(51) NOT NULL,
PRIMARY KEY (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
笑话表的代码
CREATE TABLE `jokes` (
`joke_id` int(11) NOT NULL AUTO_INCREMENT,
`joke` varchar(1024) NOT NULL,
PRIMARY KEY (`joke_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
并且这段代码将笑话描述插入笑话表
if ($valid) {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO jokes (joke) values(?)";
$q = $pdo->prepare($sql);
$q->execute(array($joke));
Database::disconnect();
header("Location: index.php");
}
我不确定如何将数据上传到另一个表中,并为该笑话分配了一个类别。如果有人能帮助我,那就太棒了,谢谢。
以下是githut上的完整文件:https://github.com/sambarrowclough/jokes.git
答案 0 :(得分:1)
我怀疑你正在寻找一种方法以某种方式将笑话与给定的类别联系起来。嗯,这就是R代表RDBMS的内容,所以我建议对MySql表之间的“关系”进行一些研究。我认为有用的还有诸如foreign key之类的概念,以及之后可能会加入表格。
但如果你只是寻找快速解决方案,你可以按照以下方式定义你的笑话表:
CREATE TABLE `jokes` (
`joke_id` int(11) NOT NULL AUTO_INCREMENT,
`joke` varchar(1024) NOT NULL,
`category_id` int(11) NOT NULL,
PRIMARY KEY (`joke_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
以上内容不添加外键限制,但需要设置类别(为非NULL)。然而,它允许您以这种方式将新实体添加到数据库:
$sql = "INSERT INTO jokes (joke, category_id) values(?,?)";
$q = $pdo->prepare($sql);
$q->execute(array($joke, $category_id));
其中$ category_id应该代表笑话所属的类别ID。
答案 1 :(得分:0)
您无法在joke
表格中添加category
。您必须在表格中引用带有索引字段的类别:
+=============+ +=============+
| category | | jokes |
+=============+ +=============+
| category_id | | joke_id |
+-------------+ +-------------+
| name | | joke |
+-------------+ +-------------+
| category_id |
+-------------+
然后当你检索一个笑话时,你知道它属于哪个类别 这在数据库设计中非常基础。您应该在 database relationships 上了解更多信息。
不要忘记在字段上创建索引(以获得巨大的性能提升):
CREATE INDEX "idx_category" ON "jokes" (category_id);
答案 2 :(得分:0)
为了将笑话链接到类别,您需要在jokes
表中添加对应字段。
CREATE TABLE `jokes` (
`joke_id` int(11) NOT NULL AUTO_INCREMENT,
`joke` varchar(1024) NOT NULL,
`category_id` int(11) NOT NULL,
PRIMARY KEY (`joke_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;
然后:
$category_id = $_POST['category_id'];
if ($valid) {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO jokes (joke, category_id) values(?,?)";
$q = $pdo->prepare($sql);
$q->execute(array($joke, $category_id));
Database::disconnect();
header("Location: index.php");
}
category_id
将显示应用于该笑话的类别,因此您可以从categories
表中检索相应的类别信息。