2013-02-25 47 views
0

所以,在的Joomla有幾個表:需要幫助建立一個MySQL的看法,複雜的連接

1) users - uid, username, email 
2) groups - gid, title 
3) user_group_map - uid, gid 

所以,我所想要做的就是創建一個視圖這使得它更容易爲我寫SQL來找到某些羣組中的用戶,而不是其他人。

所以,我在想的是創建一個視圖,從用戶表中拉出uid,用戶名,電子郵件,併爲每個組標題都有一個bool字段,即user_group_map中是否存在該uid/gid的條目表。

有意義嗎?

+1

當一個簡單的查詢就足夠了,你爲什麼需要一個'VIEW'?每次查詢邏輯發生變化時,視圖都需要被刪除和替換,這意味着比直接進行查詢更少的靈活性。 – tadman 2013-02-25 19:02:50

+0

我打開一個關於你想要的簡單查詢的建議,把它變成一個視圖只是語法糖真的...... – RedBullet 2013-02-26 00:10:09

回答

0

是的,你可以使這個這樣

SELECT uid, username, email, CASE WHEN IFNULL(ug.uid,0)=0 THEN '0' ELSE '1' END 
FROM user u 
LEFT JOIN user_group_map ug 
ON ug.uid = u.uid, groups g 

它看起來喜歡的東西,如果用戶是該組中,將返回1

+0

我認爲你可能是在正確的軌道上,但isnull需要兩個參數? – RedBullet 2013-02-26 00:16:20

+0

@RedBullet你是對的。來源:http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html – JudgeProphet 2013-02-26 11:11:53

+0

不完全是我正在尋找,但我認爲這讓我成爲那裏的一部分。 – RedBullet 2013-02-26 21:51:05

0

這裏是假定您查詢有兩個變量「$ inlist」和「$ notinlist」。

select u.* 
from user_group_map ug join 
    users u 
    on u.uid = ug.uid join 
    groups g 
    on ug.gid = g.gid 
group by u.uid 
having sum(case when $inlist like concat('%', g.title, '%') then 1 else 0 end) = 
      length($inlist) - length(replace($inlist, ',', '') and 
     sum(case when $notinlist like concat('%', g.title, '%') then 1 else 0 end) = 0 

這裏假定沒有一個組的名稱中有逗號。

我還沒有測試過這個SQL,所以它可能有語法錯誤。

+0

準確的$ inlist和$ notinlist變量是什麼? – RedBullet 2013-02-26 00:15:14

+0

@RedBullet。 。 。它們是包含或排除的id列表。 – 2013-02-26 00:21:10

+0

哦,我明白了。我在想,我想要一個扁平化的表格,這樣我就可以制定更多的常規查詢,如:select * from MyUsers where SuperUser ='1'; – RedBullet 2013-02-26 00:31:53