2010-01-18 85 views
1

我真的需要一些幫助來形成一個MySQL查詢,我只是不能解決。在我的網站上,我有一個系統,希望能記住用戶上次瀏覽網站時所做的一些選擇。MySQL查詢幫助

在該網站上,用戶可以選擇他們希望在下次訪問網站時閱讀哪些類別的內容。該設置將被記住,但菜單應該略有不同。它應顯示所有其他類別減去已保存的類別。

所以,如果我有這幾類,

  1. 博客
  2. 靈感
  3. 案例

和用戶保存的博客,下一次他們來到現場的類別列表應該只是

  1. Inspirat離子
  2. 案例研究。

該數據如何從數據庫中提取?

目前,我有識別通過一個唯一的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; 

回答

2

下面的查詢應該得到用戶沒有的類別假設cookieId對用戶保持不變,保存。如果沒有,則應該將userId放入userMenuTable中。只需將USERSCOOKIEID替換爲其實際的Cookie ID即可。

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