2012-08-09 49 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