我有一个问题,我在数据库中有两个表,一个是类别(cat_id和猫名),另一个是笑话(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
我怀疑你正在寻找一种方法来以某种方式将笑话与给定的类别联系起来。嗯,这就是R在RDBMS中代表的,所以我建议对MySql表之间的"关系"进行一些研究。我认为有用的也是诸如外键之类的概念,也许之后会连接表。
但是,如果您只是在寻找快速解决方案,则可以将笑话表定义为:
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。
为了将笑话链接到类别,您需要在表格中添加对应字段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
。
不能在category
表中添加joke
。您必须在表中使用索引字段引用类别:
+=============+ +=============+
| category | | jokes |
+=============+ +=============+
| category_id | | joke_id |
+-------------+ +-------------+
| name | | joke |
+-------------+ +-------------+
| category_id |
+-------------+
然后,当您检索一个笑话时,您就知道它属于哪个类别。
这在数据库签名中真的很基本。您应该了解有关数据库关系的更多信息。
不要忘记在字段上创建一个索引(以获得巨大的性能提升):
CREATE INDEX "idx_category" ON "jokes" (category_id);