2014-03-02 92 views
0

這是我的第一篇文章,所以我希望我已經使用了正確的地方.........篩選結果(3.2.2的Joomla)

如果任何人都可以用這個查詢幫助我將非常感激。

我在我的網站上有一個數據表,需要對其進行定製,以僅顯示基於登錄用戶分配給的用戶組訪問級別的允許信息。所以這是我當前的查詢,它顯示了當前登錄用戶根據他們註冊的電子郵件所做的記錄。因此,例如,如果我在'標準'用戶組中有5個用戶,並且他們每個都創建一條記錄,通過這個查詢,他們可以分別查看他們自己的記錄,如果用戶處於'高級'用戶組,他們需要的是他們可以查看自己的記錄以及「標準」用戶組中用戶創建的任何記錄。這是在joomla網站上,不知道這是否有所作爲,但所有的訪問級別由CMS定義,我不能在查詢中擁有實際用戶組的名稱,因爲它們會有許多不同的名稱,它需要找到基於誰是登錄的電子郵件地址/用戶的ID的用戶組。

SELECT (CASE WHEN state = '1' THEN 'Accepted' WHEN state = '-2' THEN 'Waiting' WHEN state = '-1' THEN 'Archived' WHEN state = '0' THEN 'Rejected' ELSE 'Unknown' END) AS Status, s.names, s.phone, FROM_UNIXTIME(datetime1,'%d/%m/%y %T'), s.begin, s.PickupAddr1, s.end, s.PickupAddr4, s.message, s.selpassengers, s.selluggage, IF(s.returntrip=0, 'No', 'Yes'), IF(FROM_UNIXTIME(datetime2,'%Y') = '1970', NULL, FROM_UNIXTIME(datetime2, '%d/%m/%y %T')), tc.title AS Vehicle, s.cprice, pm.title As Payment, s.payment, s.selinfantseats, s.selchildseats, s.selboosterseats, s.selcarry, s.email, s.id, s.prepay, s.vehicletype FROM #__taxibooking_orders s 
INNER JOIN #__taxibooking_cars tc ON tc.id = s.vehicletype 
INNER JOIN #__taxibooking_paymentmethods pm ON pm.id = s.payment 
WHERE s.email = {$UserEmail} 

我需要做的是修改此使得所顯示的記錄是由那些在任何特定用戶組創建。

對誰創造的記錄是「taxibooking_orders」表 的用戶組中的「羣組」表中定義的「郵件」字段 的用戶在「用戶」表裏面也有一個定義的參考「電子郵件'字段

非常感謝您的幫助。

+2

爲什麼你不使用Joomla中的標準API進行基於權限的過濾?這一切都內置到Joomla中,所有標準的核心擴展都告訴你如何做到這一點。另外,爲什麼你會使用電子郵件而不是用戶ID?訪問級別由網站管理員設計,而不是由CMS設計,CMS爲您提供了使權限對您有意義的權力。 – Elin

回答

0

我不知道Joomla 3.2(還),但Joomla 2.5有一個表#__user_usergroup_map它將用戶ID映射到用戶組ID。因此,你必須修改WHERE部分是這樣的:

WHERE s.email={$UserEmail} AND s.id IN (SELECT user_id FROM #__user_usergroup_map WHERE group_id=<yourgroupid>); 

=>這是獲得記錄,如果用戶是在用戶組。如果您想爲任何用戶執行此操作,請跳過s.email = {$ UserEmail}部分。

雖然我會同意艾琳在這兩種情況下使用id而不是電子郵件地址。

+0

謝謝Elk。我看到你在說什麼,但是我不能在查詢中定義用戶組,因爲會有很多用戶組,所以必須爲每個用戶組創建一個新的實例,這正是我想要避免的。然而,我發現了一個擴展,它似乎能夠完成我所需要的功能,所以會嘗試一下,看看它是如何發展的。 – user2999578