MySQL查询帮助

时间:2010-01-18 14:10:22

标签: mysql

我真的需要一些帮助来形成一个我无法解决的MySQL查询。在我的网站上,我有一个系统,可以记住用户上次访问网站时所做的一些选择。

在网站上,用户可以选择他们希望阅读下一次访问网站的内容的类别。该设置将被记住,但菜单应显示略有不同。它应该显示所有其他类别减去已保存的类别。

所以,如果我有这些类别,

  1. 博客
  2. 启示
  3. 案例研究
  4. 并且用户保存了Blog,下次他们来到网站时,类别列表应该只是

    1. 启示
    2. 案例研究。
    3. 如何从数据库中提取这些数据?

      目前,我有一个表格,通过唯一的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;
      

1 个答案:

答案 0 :(得分:2)

以下查询应该获取用户未保存的类别,假设cookieId对于用户保持不变。如果不是,则应将userId放入userMenuTable中。只需将USERSCOOKIEID替换为其实际的Cookie ID。

SELECT * FROM categoryTable WHERE categoryId not in 
(SELECT categoryId FROM userMenuTable WHERE cookieId = 'USERSCOOKIEID') as x