2012-08-06 34 views
0

如果选择具有最高显示优先级的组,会出现问题。 查询是:选择显示优先级最高的组

SELECT 
    xf_user_group_relation.user_id, xf_user_field_value.field_value as custom_flags, 
    xf_user_external_auth.provider_key, 
    xf_user_group_relation.user_group_id, 
    MAX(xf_user_group.display_style_priority) AS display_style_priority, 
    xf_user_group_relation.user_group_id IN(5,6,11,12) AS is_vip 
FROM xf_user_group_relation 
INNER JOIN xf_user_group 
    ON xf_user_group_relation.user_group_id = xf_user_group.user_group_id 
INNER JOIN xf_user_external_auth 
    ON xf_user_group_relation.user_id = xf_user_external_auth.user_id 
LEFT JOIN xf_user_field_value 
    ON xf_user_group_relation.user_id = xf_user_field_value.user_id 
    AND xf_user_field_value.field_id = 'gtarp_custom_flags' 
WHERE 
    xf_user_external_auth.provider = 'steam' 
    AND xf_user_group.display_style_priority >= 1000 
    AND xf_user_group_relation.user_group_id NOT IN(19,20) 
GROUP BY 
    xf_user_group_relation.user_id, 
    xf_user_external_auth.provider_key 

看来它选择具有最低的ID,这不是我想要的组。我希望它选择显示优先级最高的组。

所以user_group_id应该是具有最高优先显示该组即MAX(xf_user_group.display_style_priority)

回答

0

试试这个:

SELECT 
    xf_user_group_relation.user_id, xf_user_field_value.field_value as custom_flags, 
    xf_user_external_auth.provider_key, 
    xf_user_group_relation.user_group_id, 
    MAX(xf_user_group.display_style_priority) AS display_style_priority, 
    xf_user_group_relation.user_group_id IN(5,6,11,12) AS is_vip 
FROM xf_user_group_relation 
INNER JOIN xf_user_group 
    ON xf_user_group_relation.user_group_id = xf_user_group.user_group_id 
INNER JOIN xf_user_external_auth 
    ON xf_user_group_relation.user_id = xf_user_external_auth.user_id 
LEFT JOIN xf_user_field_value 
    ON xf_user_group_relation.user_id = xf_user_field_value.user_id 
    AND xf_user_field_value.field_id = 'gtarp_custom_flags' 
WHERE 
    xf_user_external_auth.provider = 'steam' 
    AND xf_user_group.display_style_priority >= 1000 
    AND xf_user_group_relation.user_group_id NOT IN(19,20) 
GROUP BY 
    xf_user_group.display_style_priority, 
    xf_user_group_relation.user_id, 
    xf_user_external_auth.provider_key 
+0

每一组用户在现在显示,所以这是行不通的。 – BlackVoid 2012-08-06 23:16:02

+0

基本上你需要做的是,当你为任何表列选择MAX()时,你需要确保该表在GROUP BY子句中生效。 – Kalpesh 2012-08-06 23:17:43