gpt4 book ai didi

php - 更改查询以将 3 个表连接在一起

转载 作者:行者123 更新时间:2023-11-29 23:58:12 25 4
gpt4 key购买 nike

在我的数据库中,我有 3 个表。

笑话:

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 `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=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 ;

我需要将所有三个表连接在一起,以获取笑话的类别名称、笑话本身以及与特定笑话_id 相关的唯一评论。

目前我只能连接两个笑话_id = 1 的表。这将返回该笑话的评论。

该函数存储在我的读取 Controller 中,名称为 Joke:

public function joke($joke_id = FALSE)
{
if ($joke_id === FALSE) redirect('main'); //go to default controller

$data['results'] = $this->comments_m->getComments($joke_id, $this->uri->segment(2));

$this->load->view('template/header');
$this->load->view('template/sidebar');
$this->load->view('content/read', $data);
$this->load->view('template/footer');

}

模型 (getjokes_m) 有一个名为 readJokes 的函数,它仅获取类别、笑话和笑话_id 来读取一个特定的笑话:

function readJokes($joke_id)
{

$query = $this->db->query("SELECT j.*, c.name FROM jokes j LEFT JOIN category c ON c.category_id = j.category_id WHERE joke_id = '$joke_id'") or die("No results found" );

//displays the results
return $query->result();

}

目前,这只会获取笑话的类别名称和笑话本身。我想要的是也获取对这个笑话的评论。如何更改查询以返回我需要的信息?

编辑:

此查询似乎有效:

SELECT c.name, j.*, co.* FROM jokes j LEFT JOIN category c ON c.category_id = j.category_id LEFT JOIN comments co ON co.joke_id = j.joke_id WHERE j.joke_id =  '$joke_id'"

但与此同时,它抓取该笑话的次数与该笑话因某种原因被评论的次数一样多。即该笑话有 6 条评论,该笑话被播放了 6 次。

最佳答案

编辑:

SELECT j.joke AS  'Joke', c.name AS  'Category',  'Comments : ' AS  'Comments'
FROM jokes j
LEFT JOIN category c ON c.category_id = j.category_id
WHERE j.joke_id = '1'
UNION
SELECT '' AS 'Joke', '' AS 'Category', c.comment AS 'Comments'
FROM comments c
WHERE c.joke_id = '1'
LIMIT 0 , 30

我没有你的数据,很难测试,但你可能想尝试一下。 这是一个查询。更简洁的方法是获取笑话,然后针对该笑话 id 获取评论。

关于php - 更改查询以将 3 个表连接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25208042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com