2012-08-09 51 views
0

有一个项目的目录。每个项目都位于类别下。对于每个类别,我们都可以拥有不同权限的用户(admin,expert,user)。当我们添加一个项目时,我们选择可见性: (1) - 对所有人都可见 (2) - 仅显示此项目发布类别的管理员和专家 (3) - 对于该类别的所有成员可见物品被张贴 (0) - 隐藏所有(只有创造者可以看到)。用不同的权限搜索php

让我说我有500个项目的标题中的单词“键盘”。他们大多数在不同的类别。这些500中只有1项具有隐私 - 2(专家和管理员可以看到该类别)并位于“Logitech”类别下。当我作为“Logitech”类别的管理员在搜索时键入“键盘”时,我应该看到搜索找到500个项目,并向我展示其中的10个项目。如果只是一个普通用户(不是管理员或专家),在搜索中键入“键盘”,他将看到该搜索找到499项,并向他显示该499项中的10个。

是抓取20个项目而不是10个,并检查每个项目的隐私,然后在搜索结果中只显示10个项目唯一可能的解决方案?但是,如果这20个都将“隐藏给用户”呢?

在此先感谢您的回复。

数据库草图:

1)个项目[ID,标题,CATEGORY_ID,能见度]

2)类:[ID,标题]

3)category_user [ID,USER_ID,CATEGORY_ID,作用(专家,管理员,用户)]

4)用户[ID,名称]

+0

我们需要更多的细节。你使用MySQL数据库吗?显然你的搜索页面上的PHP代码?如果是,那么这是真的,你只需要帮助就发送到数据库的查询? – weltschmerz 2012-08-09 13:17:11

+0

我正在使用php + mysql。我需要一些建议,如何从mysql获取并组织结果。只是想法会很好。 – FaStie9000 2012-08-09 13:19:48

+0

好的,你的桌子是什么样的?只需要知道你有不同的列。另外,你是否只有一张桌子? – weltschmerz 2012-08-09 13:20:01

回答

1

像这样的事情可能做的伎俩:

SELECT i.*,c.*,cu.*u.* 
FROM items i,categories c, category_user cu, user u 
WHERE i.title LIKE '%$search%' 
AND i.category_id=c.id 
AND cu.category_id=c.id 
AND u.id=cu.user_id 
AND cu.role='expert' 
AND i.visibility=1 

根据userdata更改cu.role和i.visbility。

+0

但是这仅限于专家。如果这将是一个用户(不属于任何类别) - >它不会给出任何结果,但它应该给出499个结果 – FaStie9000 2012-08-09 13:35:56

+0

您应该存储用户的详细信息(如他是否是专家等)会话变量。然后,您可以在查询中使用该会话变量作为字符串。 – weltschmerz 2012-08-09 13:37:25

+1

谢谢,会试试 – FaStie9000 2012-08-09 13:42:01