1

我有一个问题,我在数据库中有两个表,一个是类别(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

4

3 回答 3

1

我怀疑您正在寻找一种以某种方式将笑话与给定类别联系起来的方法。好吧,这就是 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 ;

上面没有添加外键限制,但需要设置类别(不为空)。不过,它允许您以这种方式将新实体添加到数据库:

$sql = "INSERT INTO jokes (joke, category_id) values(?,?)";
$q = $pdo->prepare($sql);
$q->execute(array($joke, $category_id));

其中 $category_id 应该代表笑话所属类别的 id。

于 2013-11-05T16:14:59.540 回答
0

您不能jokecategory表中添加 a。您必须在表中使用索引字段引用类别:

+=============+  +=============+
| category    |  | jokes       |
+=============+  +=============+
| category_id |  | joke_id     |
+-------------+  +-------------+
| name        |  | joke        |
+-------------+  +-------------+
                 | category_id |
                 +-------------+

然后当你检索一个笑话时,你就知道它属于哪个类别。
这在数据库设计中是非常基础的。您应该更多地了解数据库关系

不要忘记在字段上创建索引(以获得巨大的性能提升):

CREATE INDEX "idx_category" ON "jokes" (category_id);
于 2013-11-05T16:08:33.837 回答
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表中检索相应的类别信息。

于 2013-11-05T16:09:02.540 回答