gpt4 book ai didi

php - 如何在单个查询中从多对多关系数据库获取博客文章和类别?或者我应该吗?

转载 作者:行者123 更新时间:2023-11-29 21:09:17 25 4
gpt4 key购买 nike

我已经为我的博客创建了一个数据库。它包含三个表,一个用于帖子,一个用于类别,一个用于帖子和类别之间的多对多关系:

CREATE TABLE IF NOT EXISTS `posts` (
`pid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`post` mediumtext NOT NULL,
...
PRIMARY KEY (`pid`),
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `categories` (
`cid` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`category` varchar(200) NOT NULL,
...
PRIMARY KEY (`cid`),
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `post_to_category_relation` (
`pid` smallint(5) unsigned NOT NULL,
`cid` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`pid`,`cid`),
UNIQUE KEY `secondary` (`cid`,`pid`),
FOREIGN KEY (`pid`) REFERENCES `posts` (`pid`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`cid`) REFERENCES `categories` (`cid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

现在我想使用 PHP 查询该数据库,检索一篇文章的信息,并在网络上显示该文章。

但我不确定如何做到这一点。

单个帖子的所有信息都在 posts 表中:帖子标题、帖子文本、帖子作者、发布日期和 URL slug。这样我就可以通过一个查询构建我的页面。

但是,该表不包含类别。

最初,我想将类别保存为字符串(例如“apples,oranges,bananas”)并explode(",", ...)该字符串以创建指向类别页面。这将使我能够通过一个数据库查询创建整个帖子页面。但现在...

我真的需要进行第二次查询来检索帖子的类别吗?或者有没有一种方法可以在一个查询中获取我需要的所有内容 - 也许可以为我提供一个多维数组(或一个对象),其结构类似于:

Array
(
[pid] => 1
[post] => "Hello, World!"
...
[categories] => Array
(
[0] => apples
[1] => bananas
)
)

这通常是如何完成的?最佳实践是什么?

最佳答案

试试这个:http://sqlfiddle.com/#!2/ecad8/12

select posts.pid, group_concat(categories.category)
from posts

left outer join post_to_category_relation as ptcr
on ptcr.pid = posts.pid

left outer join categories
on categories.cid = ptcr.cid

where posts.pid = 1

然后,在您的应用程序中,您可以将类别列explode() 转换为一个数组,并以, 作为分隔符。

关于php - 如何在单个查询中从多对多关系数据库获取博客文章和类别?或者我应该吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36534555/

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