需要帮助创建MySQL视图、复杂连接吗

需要帮助创建MySQL视图、复杂连接吗,mysql,join,view,joomla,Mysql,Join,View,Joomla,因此,在joomla有几个表格: 1) users - uid, username, email 2) groups - gid, title 3) user_group_map - uid, gid 所以,我想做的是创建一个视图,使我更容易编写SQL来查找某些组中的用户,而不是其他组中的用户 所以,我想创建一个视图,从用户表中提取uid、用户名和电子邮件,并为每个组标题创建一个bool字段,即用户组映射表中是否有该uid/gid的条目 有意义吗?是的,你可以这样做 SELECT uid, u

因此,在joomla有几个表格:

1) users - uid, username, email
2) groups - gid, title
3) user_group_map - uid, gid
所以,我想做的是创建一个视图,使我更容易编写SQL来查找某些组中的用户,而不是其他组中的用户

所以,我想创建一个视图,从用户表中提取uid、用户名和电子邮件,并为每个组标题创建一个bool字段,即用户组映射表中是否有该uid/gid的条目


有意义吗?

是的,你可以这样做

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。

这里是一个假设您有两个变量“$inlist”和“$notinlist”的查询

这假定所有组的名称中都没有逗号


我还没有测试过这个SQL,所以它可能有语法错误。

如果一个简单的查询就足够了,为什么还需要一个
视图呢?每次您的查询逻辑发生变化时,都需要删除和替换视图,这意味着比直接执行查询更不灵活。我愿意听取您对简单查询的建议,将其转换为视图只是语法上的糖分。真的……什么是$inlist和$notinlist变量?@RedBullet。它们是要包括或排除的ID列表。哦,我明白了。我想我需要一个扁平的表,这样我就可以制定更常规的查询,比如:select*fromMyUsers,其中SuperUser='1';我想你的思路可能是对的,但是isnull有两个参数?@RedBullet你说得对。资料来源:不完全是我想要的,但我认为这让我走到了那里。
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