使用查询从所有三个表中获取数据(SQL)

时间:2014-08-13 19:12:30

标签: php mysql sql codeigniter join

在我的数据库中,我有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,
  `user` 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 ;

这三个表需要连接在一起以从每个表中获取数据。到目前为止,我已经使用这三个查询,没有运气得到我需要的东西。

我需要这个查询做什么

  • 将joke_id分配给评论中的joke_id,并在视图中显示joke_id。
  • 将笑话的category_id指定给名称并显示
  • 抓住选票
  • 抓住笑话

第一个查询 - 这个查询确实抓住了我想要的所有数据,但同时没有获取joke_id并将其传递给视图(因为我需要joke_id来为该唯一ID分配注释):

SELECT j.*, c.name, 
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'

第二个查询 - 此查询将类别连接到正确的查询,并显示笑话和joke_id,以便为其分配注释。但它没有显示任何评论

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

第三个查询 - 这个查询是由一个用户在堆栈溢出时提供的,但是当没有任何评论附加到该笑话时,似乎会抛出一大堆错误

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

任何改变此查询以帮助将三个数据库中的所有项目放在一起的帮助将非常感激!

1 个答案:

答案 0 :(得分:2)

编辑选定的字段以满足您的需求。此外,如果您只想显示一个笑话及其数据,您必须像在WHERE上那样设置所需笑话的ID。

SELECT jokes.*, category.*, comments.* FROM jokes LEFT JOIN category ON jokes.category_id = category.category_id LEFT JOIN comments ON jokes.jokes_id = comments.joke_id