我确实有关于 SQL 的问题。
我有 3 张桌子:
- 表 1 被调用
news
并且有一个主键ID
- 表2被调用
categories
,也有一个主键ID
- 表 3 被调用
newscat
并且有 2 列,news
并且cat
我现在正在搜索一个 SQL 查询,它允许我找到下一个 ID,而不是 X 类。
举一个实际的例子:
- 我有一个新闻页面和一个按钮来跳转到下一个新闻项目。
我也有一个名为 的小组
Unpublished
,所以我现在正试图获得下一个news
未发布的小组。新闻可以分为多个类别!SELECT p.id FROM posts p, post_cats pc WHERE ???? AND pc.post = p.id AND p.id < '22' ORDER BY p.id DESC LIMIT 1
有人知道吗?
希望这行得通(只是手工写得很快):
CREATE TABLE IF NOT EXISTS `categories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200) CHARACTER SET latin1 NOT NULL,
`special` varchar(100) CHARACTER SET latin1 NOT NULL COMMENT '[unpub]',
PRIMARY KEY (`id`),
KEY `name` (`name`,`special`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=8 ;
INSERT INTO `categories` (`id`, `name`, `special`) VALUES
(1, 'Category#1', ''),
(2, 'Category#2', ''),
(3, 'Category#3', ''),
(4, 'Unpublished', 'unpub');
CREATE TABLE IF NOT EXISTS `posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(200) CHARACTER SET latin1 NOT NULL,
`desc` text CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`id`),
KEY `title` (`title`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=4 ;
INSERT INTO `posts` (`id`, `title`, `desc`) VALUES
(1,'Title#1','Desc#1'),
(2,'Title#2','Desc#2'),
(3,'Title#3','Desc#3');
CREATE TABLE IF NOT EXISTS `post_cats` (
`cat` int(11) NOT NULL,
`post` int(11) NOT NULL,
KEY `cat` (`cat`,`post`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
INSERT INTO `post_cats` (`cat`, `post`) VALUES
(1, 1),
(2, 1),
(3, 2),
(1, 2),
(2, 3),
(3, 3),
(4, 2);
所以这个想法是,如果我在News
1 上并单击下一步,它应该返回News
3,因为News
2 位于Category
设置了“unpub”标志的位置。