老葛,您好!
我开启了OG模块,已经写好下面SQL语句,在查询器使用,是没有问题的。
涉及到两个表,一个是node,一个是og_membership表
SELECT
n.title,
COUNT(om.etid) AS ct
FROM node AS n
INNER JOIN og_membership AS om
ON n.nid = om.gid
WHERE n.status = 1
AND n.type = 'group'
AND om.entity_type='user'
GROUP BY om.etid
现在想将它放在views上使用,我对views模块不熟悉,请问需要怎么配置呢?
我实践过只处理一个表,比较简单。
现在处理两个或两个以上的表,表示有点犯难。
请指点一下设置,谢谢了
本来打算直接写成模块来弄的,但是我看中了views的缓存功能,哎~~
做这样的功能的时候,创建views时,选择og_membe
做这样的功能的时候,创建views时,选择og_membership表为基表,然后拿它去关联节点,这样比较方便。熟悉了以后,反过来关联也可以。
谢谢老葛,我按照您的提示,一步一步地快要操作实现了。可是g
谢谢老葛,我按照您的提示,一步一步地快要操作实现了。可是group的部分还是有疑问,请见图片:
在这里,我明明只选择了一个gid 的group字段,
为什么sql里显示:
SELECT node_og_membership.title AS node_og_membership_title, node_og_membership.nid AS node_og_membership_nid, (这行我没选择,怎么也出来了呢?)
COUNT(og_membership.gid) AS og_membership_gid
FROM
{og_membership} og_membership
INNER JOIN {node} node_og_membership ON og_membership.gid = node_og_membership.nid AND og_membership.group_type = 'node'
WHERE (( (og_membership.entity_type LIKE 'user' ESCAPE '\\') AND (node_og_membership.status = '1') ))
GROUP BY node_og_membership_title, node_og_membership_nid
ORDER BY og_membership_gid ASC
LIMIT 10 OFFSET 0
还多了个
node_og_membership_title呢?
上面打红线的地方都是有疑问的,
另外,我开启了该og的views缓存,见下图:
以上描述可能有点混乱,我再汇总一下:
1,group的问题,我没有选择node_og_membership_title作为group by的字段,为什么还是会显示在sql呢?
2,我也没选择node_og_membership.nid这个字段,为什么也会显示在select的后面呢?
3,过滤标准里我加了og_membership.entity_type='user'的条件,为什么变成LIKE语句了呢?
4,这些自定义的view缓存都是保存在cache_views_data表的吗?难道不是文件形式缓存的么?后来我发现,不管有没有设置缓存,cache_views表清空后,仍然都有数据的,不明白这个缓存机制是什么,老葛能解释或者提供资料吗?
麻烦您了,谢谢!
2,我也没选择node_og_membership.nid
2,我也没选择node_og_membership.nid这个字段,为什么也会显示在select的后面呢?
这个系统默认就是这样的,你在Fields里面添加不添加nid,sql里面都有这个。
3,过滤标准里我加了og_membership.entity_type='user'的条件,为什么变成LIKE语句了呢?
默认就是这样的,知道就可以了。
4,这些自定义的view缓存都是保存在cache_views_data表的吗?难道不是文件形式缓存的么?后来我发现,不管有没有设置缓存,cache_views表清空后,仍然都有数据的,不明白这个缓存机制是什么,老葛能解释或者提供资料吗?
缓存就是,一次生成以后,下次调用的时候,会检查有没有缓存,如果有的话,直接调用缓存;如果没有的话,重新生成一遍返回回去,并把生成的结果缓存起来,以供下次调用。
第一个我也不知道,可能默认就是这样的。