在我的数据库中,我有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'
任何帮助改变这个查询得到所有项目在三个数据库在一起将非常感激!
编辑所选字段以满足您的需要。另外,如果你想只显示一个笑话和它的数据,你必须设置你想要的笑话的id,就像你在WHERE上所做的那样。
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