所以在我的数据库中我有两个表。笑话和评论。我希望能够将评论的post_id分配给笑话的joke_id,因此它将分配和检索与该笑话相关的评论。我的问题是我很擅长编写SQL语句,并且对于如何连接两个表来实现这一点并不是最模糊的。
我的笑话表如下:
CREATE TABLE IF NOT EXISTS `jokes` (
`joke_id` int(11) NOT NULL AUTO_INCREMENT,
`joke` varchar(1024) NOT NULL,
`category_id` int(11) NOT NULL,
`vote` int(255) NOT NULL,
`date_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`joke_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
我的评论表如下:
CREATE TABLE IF NOT EXISTS `comments` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(40) NOT NULL,
`comment` text NOT NULL,
`joke_id` int(11) NOT NULL,
`post_id` int(11) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
目前,我通过分配$ post_id =“1”获取数据,但我想将其更改为$ post_id = $ joke_id(笑话ID在同一个函数中,但是我我不知道怎么做。)
如果有任何帮助,我正在使用带有codeigniter的MVC。
在我的控制器中,我有一个名为comments的php文件,它有一个名为insertComment的函数,如下所示:
public function insertComment(){
//extracts the data from the ajax
extract($_POST);
if($_POST['act'] == 'add-com'){
//assigned the db rows with the actual data which was inputted
$data = array(
'name' => htmlentities($name),
'comment' => htmlentities($comment),
//id_post should correlate to the joke_id
'id_post' => $id_post = "1"
);
$this->comments_m->insertComment($data);
}
和我的insertComment函数,在comment_m函数的模型中看起来像这样:
function insertComment (){
extract($_POST);
if($_POST['act'] == 'add-com'){
$data = array(
'name' => htmlentities($name),
'comment' => htmlentities($comment),
'id_post' => $id_post = "1"
);
if(strlen($data['name']) <= '1'){
$data['name'] = 'Guest';
}
$this->db->insert('comments', $data);
}
}
要最终确定,如果有人可以帮助将两个表连接在一起的SQL语句,那将是一个很大的帮助,其中joke_id具有与注释的post_id相同的值,这将使其成为该笑话的唯一。
谢谢
答案 0 :(得分:1)
连接这两个表的SQL是 -
SELECT `jokes`.*, `comments`.*
FROM `jokes`
LEFT OUTER JOIN `comments`
ON `jokes`.`joke_id` = `comments`.`joke_id`
这将返回每个笑话的所有评论。然后,您可以通过添加WHERE子句来过滤或限制 -
WHERE `jokes`.`joke_id` = 1