我有一个现有的查询,我正在使用连接(感谢RADAR)来获取我的数据。
SELECT
IFNULL(f.field_full_name_value, 'No Value'), u.name, u.uid, n.title, n.nid, a.timestamp, d.field_video_duration_value AS duration
FROM
db_node_view_count a
join db_node n
ON a.nid = n.nid
JOIN db_field_data_field_video_duration d
ON n.nid = d.entity_id
JOIN db_users u
ON a.uid = u.uid
AND u.uid <> 1
LEFT JOIN db_field_data_field_full_name f
ON u.uid = f.entity_id
ORDER BY u.uid desc
我想要做的是我想扩展查询以显示db_users u
的角色。有一个名为db _ roles
的表,它包含具有主键rid的所有角色名称。然后第二个表是db_users_roles
,其中包含匹配的uid
(来自db_users u),并显示哪个用户选择了哪个角色。
所以我做的是在ON a.uid = u.uid
下,我添加了JOIN db_users_roles ur ON u.uid = ur.uid JOIN db_role r ON ur.rid = r.rid
。它工作正常但它显示重复的行。知道为什么会这样吗?
SELECT
IFNULL(f.field_full_name_value, 'No Value'), r.name, u.name, u.uid, n.title, n.nid, a.timestamp, d.field_video_duration_value AS duration
FROM
db_node_view_count a
join db_node n
ON a.nid = n.nid
JOIN db_field_data_field_video_duration d
ON n.nid = d.entity_id
JOIN db_users u
ON a.uid = u.uid
LEFT JOIN db_users_roles ur
ON u.uid = ur.uid
LEFT JOIN db_role r
ON ur.rid = r.rid
AND u.uid <> 1
LEFT JOIN db_field_data_field_full_name f
ON u.uid = f.entity_id
ORDER BY u.uid desc
在Joe的帮助下,这是一个小小的更新:
SELECT
IFNULL(f.field_full_name_value, 'No Value'), GROUP_CONCAT(r.name), u.name, u.uid, n.title, n.nid, a.timestamp, d.field_video_duration_value AS duration
FROM
db_node_view_count a
join db_node n
ON a.nid = n.nid
JOIN db_field_data_field_video_duration d
ON n.nid = d.entity_id
JOIN db_users u
ON a.uid = u.uid
LEFT JOIN db_users_roles ur
ON u.uid = ur.uid
LEFT JOIN db_role r
ON ur.rid = r.rid
AND u.uid <> 1
LEFT JOIN db_field_data_field_full_name f
ON u.uid = f.entity_id
GROUP BY f.field_full_name_value
ORDER BY u.uid desc
答案 0 :(得分:1)
您的(Drupal)数据库中的某些用户可能有多个角色。因此,如果您的原始查询每个节点有一行(简化了一点),则修改后的查询将复制用户每个角色的行。
您可能希望修改要包含的查询 GROUP BY n.nid,u.uid 并更改SELECT字段列表以包括GROUP_CONCAT(r.name)而不是r.name。