用户构建的导航帮助

时间:2010-02-12 15:30:22

标签: database mysql

我目前正在尝试构建由用户半建造的导航,基本上用户具有主导航,其中如果他们点击类别名称,则在该类别的页面上创建块。如果他们再次点击相同的链接,该块将从页面中删除,网站设置为记住用户在最后一次访问时选择的块,我的问题是让菜单正确显示。

菜单的工作方式是构建主导航链接,当用户点击链接时,如果链接在再次单击时被赋予“已保存”类,则“已保存”类将被删除。

当用户返回站点时,如果显示关联的块,则主要导航链接应该保存该类。

我需要做的是找到一种方法,将主导航的所有链接从数据库中取出,并检查用户是否在最后一次访问中选择了这些链接。

数据库结构是这样的,

这是我的主要链接的表格

   CREATE TABLE categoryTable (
  categoryId int(11) NOT NULL auto_increment,
  categoryTitle varchar(25) NOT NULL,
  categoryAbstract varchar(60) NOT NULL,
  categorySlug varchar(25) NOT NULL,
  categoryIsSpecial int(1) NOT NULL,
  categoryOnline int(1) NOT NULL,
  categoryDateCreated int(10) NOT NULL,
  dashboardUserId int(11) NOT NULL,
  PRIMARY KEY  (categoryId)
)

此表是关于用户已打开的块的信息

    CREATE TABLE 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)
)

我试过这个查询来获取userMenuTable中没有的所有类别,但它不起作用,

SELECT *
FROM `categoryTable`
WHERE `categoryId`
NOT IN (
SELECT `userMenuTable`.`categoryId`
FROM (`userMenuTable`)
LEFT JOIN `categoryTable` ON 
`categoryTable`.`categoryId` = `userMenuTable`.`categoryId`
WHERE `userMenuTable`.`cookieId` = '{$cookieId}')

我显然做错了,任何人都可以解释我的问题吗?

1 个答案:

答案 0 :(得分:1)

为什么在上面的查询中使用NOT IN?似乎IN会更合适。无论如何,这是一个更简单/更有效的查询:

SELECT cat.*
FROM userMenuTable user
LEFT JOIN categoryTable cat ON cat.categoryId = user.categoryId
WHERE user.cookieId = '{$cookieId}'