gpt4 book ai didi

mysql - 我如何从某个类别及其子类别中获取文章?

转载 作者:IT王子 更新时间:2023-10-28 23:49:28 25 4
gpt4 key购买 nike

我正在开发一个使用类别和子类别的文章系统。

基本上,如果类别有 parent_id 值,它就是该类别的子类别。

我希望能够从某个类别中获取最新文章以及从其子类别中获取文章。

例如:我有一个名为“游戏文章”的类别,以及名为 Xbox、PlayStation、Nintendo 和 PC 的几个子类别。我的系统可以在父类别(例如游戏文章)和子类别中发布文章。

因此,这必须包括属于父类别或该父类别的子类别的文章。

CREATE TABLE IF NOT EXISTS `articles` (
`article_id` int(15) NOT NULL AUTO_INCREMENT,
`author_id` int(15) NOT NULL,
`category_id` int(15) NOT NULL,
`modification_id` int(15) NOT NULL,
`title` varchar(125) NOT NULL,
`content` text NOT NULL,
`date_posted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`status` tinyint(1) NOT NULL,
`attachment_id` int(15) NOT NULL,
PRIMARY KEY (`article_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `article_categories` (
`category_id` int(15) NOT NULL AUTO_INCREMENT,
`parent_id` int(15) NOT NULL,
`title` varchar(50) NOT NULL,
`description` text NOT NULL,
`attachment_id` text NOT NULL,
`enable_comments` tinyint(1) NOT NULL,
`enable_ratings` tinyint(1) NOT NULL,
PRIMARY KEY (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

到目前为止我的查询...

SELECT article_id, category_id
FROM articles
WHERE category_id = 1
ORDER BY article_id DESC
LIMIT 10

当然,这只会获取该类别下的文章,而不是来自该类别和该类别的子类别。

最佳答案

按照您的表结构,假设只有 1 级嵌套(即子级本身没有子级),此查询将起作用:

SELECT a.*
FROM articles a
JOIN article_categories ac ON a.category_id = ac.category_id
WHERE 1 IN (a.category_id, ac.parent_id)
ORDER BY a.article_id DESC
LIMIT 10

注意“反转”样式 IN 以巧妙地捕捉有效的 OR 内容。

如果您的嵌套更深,只需为每个级别添加另一个连接,例如,如果您最多有 4 个级别(比上述查询多 2 个):

SELECT a.*
FROM articles a
JOIN article_categories ac1 ON a.category_id = ac1.category_id
LEFT JOIN article_categories ac2 ON ac1.parent_id = ac2.category_id
LEFT JOIN article_categories ac3 ON ac2.parent_id = ac3.category_id
WHERE 1 IN (a.category_id, ac1.parent_id, ac2.parent_id, ac3.parent_id
ORDER BY a.article_id DESC
LIMIT 10

在第二种情况下,必须使用左连接才能返回上面没有那么多级别的文章。

关于mysql - 我如何从某个类别及其子类别中获取文章?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22498849/

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