我要檢查,同時通過獅身人面像指數搜索中誰是尋找一些文件的用戶的讀取權限使用。獅身人面像搜索引擎與訪問權限表
對於examle我有DOC_ID,DOC_TITLE和doc_is_global的文件表。上另一側我有像一個結構的accessprivileges表:
USER_ID,user_group_id,DOC_ID,doc_category_id
用戶能夠在「USER_GROUP」具有標識符user_group_id和文檔等效成document_categories分組。
Access表可能看起來像:
USER_ID,user_group_id,DOC_ID,doc_category_id
1,NULL,1,NULL
NULL,12,NULL,32
1,NULL,NULL,31
NULL,10,1,NULL
用戶應該只找到其中is_global標誌被設置爲1的文件或他用USER_ID訪問,或由GROUP_ID他是成員。
在普通的MySQL我得到一些正確的結果JOIN的一樣:
SELECT * from documents d
LEFT JOIN document_category dc ON dc.doc_id = d.doc_id
LEFT JOIN access a ON a.user_id = {$user} and a.doc_id = d.doc_id
LEFT JOIN access a ON a.category_id = dc.category_id and dc.group_id IN ({$groups})
[...]
在獅身人面像,我知道,我可以把多個屬性的索引文件,但是是不是我想要的。在我的生產環境中,我還要檢查哪個用戶授予了讀取權限,並且只有當他能夠這樣做時,用戶才能成爲讀取權限。 製造使用獅身人面像多個屬性返回類似這種情況:
access_user_id =(1,4,6,2)accessed_by_user =(1,5,3)
所以沒有可能性檢查誰給誰閱讀權限。接下來的問題是獅身人面像只支持最大。每個索引4gb屬性。
我需要一些暗示一個想法來建立索引過濾掉用戶不允許看到的結果(也許有多個索引嗎?)
感謝您的回覆,您給了我正確的提示。現在我遇到了group_concat_max_length的問題。在某些情況下,可能會有一些文檔與成千上萬的用戶分享。我認爲它可以在存儲所有數據的單獨表格中使用。在Oracle DBMS中,我將使用動態查詢構建pl/sql過程,並遍歷access_user表等(包dbms_sql)以獲取分塊數據並將其插入臨時表中。我也可以用php做到這一點,但我認爲它不是最好的主意。你有沒有2提示讓我解決mysql的問題? – take 2012-03-24 10:59:58
編輯答案以包含使用GROUP_CONCAT的替代項。 – barryhunter 2012-03-24 16:51:43
>>如此將索引分成部分
如何完成? – 2015-05-20 11:23:27