我真的需要一些帮助来形成一个我无法解决的MySQL查询。在我的网站上,我有一个系统,可以记住用户上次访问网站时所做的一些选择。
在网站上,用户可以选择他们希望阅读下一次访问网站的内容的类别。该设置将被记住,但菜单应显示略有不同。它应该显示所有其他类别减去已保存的类别。
所以,如果我有这些类别,
并且用户保存了Blog,下次他们来到网站时,类别列表应该只是
如何从数据库中提取这些数据?
目前,我有一个表格,通过唯一的Cookie ID识别用户:
CREATE TABLE IF NOT EXISTS `cookieTable` (
`cookieEntryId` int(11) NOT NULL AUTO_INCREMENT,
`cookieId` varchar(32) NOT NULL,
`expirationDate` int(10) NOT NULL,
PRIMARY KEY (`cookieEntryId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
我有一个类别表
CREATE TABLE IF NOT EXISTS `categoryTable` (
`categoryId` int(11) NOT NULL AUTO_INCREMENT,
`categoryTitle` varchar(25) NOT NULL,
`categoryAbstract` varchar(150) NOT NULL,
`categorySlug` varchar(25) NOT NULL,
`categoryIsSpecial` int(1) DEFAULT NULL,
`categoryOnline` int(1) DEFAULT NULL,
`dashboardUserId` int(11) NOT NULL,
`categoryDateCreated` int(10) NOT NULL,
PRIMARY KEY (`categoryId`),
KEY `dashboardUserId` (`dashboardUserId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
我的表格可以保存用户保存的类别,
CREATE TABLE IF NOT EXISTS `userMenuTable` (
`menuEntryId` int(11) NOT NULL AUTO_INCREMENT,
`categoryId` int(11) NOT NULL,
`cookieId` varchar(32) NOT NULL,
PRIMARY KEY (`menuEntryId`),
KEY `categoryId` (`categoryId`,`cookieId`),
KEY `cookieId` (`cookieId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6;
答案 0 :(得分:2)
以下查询应该获取用户未保存的类别,假设cookieId对于用户保持不变。如果不是,则应将userId放入userMenuTable中。只需将USERSCOOKIEID替换为其实际的Cookie ID。
SELECT * FROM categoryTable WHERE categoryId not in
(SELECT categoryId FROM userMenuTable WHERE cookieId = 'USERSCOOKIEID') as x