You are here

views模块使用group,count,inner join的问题

moumouguoguo 的头像
Submitted by moumouguoguo on 星期四, 2013-10-10 10:17

老葛,您好!
我开启了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的缓存功能,哎~~

论坛:

Drupal版本:

moumouguoguo 的头像

谢谢老葛,我按照您的提示,一步一步地快要操作实现了。可是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表清空后,仍然都有数据的,不明白这个缓存机制是什么,老葛能解释或者提供资料吗?
 

麻烦您了,谢谢!

 

 

g089h515r806 的头像

2,我也没选择node_og_membership.nid这个字段,为什么也会显示在select的后面呢?

这个系统默认就是这样的,你在Fields里面添加不添加nid,sql里面都有这个。

 

3,过滤标准里我加了og_membership.entity_type='user'的条件,为什么变成LIKE语句了呢?

默认就是这样的,知道就可以了。

4,这些自定义的view缓存都是保存在cache_views_data表的吗?难道不是文件形式缓存的么?后来我发现,不管有没有设置缓存,cache_views表清空后,仍然都有数据的,不明白这个缓存机制是什么,老葛能解释或者提供资料吗?

缓存就是,一次生成以后,下次调用的时候,会检查有没有缓存,如果有的话,直接调用缓存;如果没有的话,重新生成一遍返回回去,并把生成的结果缓存起来,以供下次调用。

 

第一个我也不知道,可能默认就是这样的。