3

我正在 Joomla 2.5 中创建一个用户配置文件插件来扩展标准用户字段。

问题是我需要一种有效的方法来通过 MySQL 查询检索用户(以及额外的字段)。目前我能想到的最好的方法是查询 #__user_profiles 表并处理该数据以确定要加载的额外字段,然后生成一个查询,该查询为每个额外的用户字段在 #__user_profiles 表上创建一个单独的连接。

显然,这不是很有效,并且在大型用户群中,查询速度很慢。

有没有更好的方法将作为另一个表中单独记录的额外用户字段组合到一个查询中?

编辑:

我有一个外部脚本需要获取所有用户及其扩展字段,因此我需要合并 #_ users 和 # _user_profiles 表

4

2 回答 2

4

这只是两个表之间的连接

select u.*, p.*
from #__users u
left join #__user_profiles p on p.user_id = u.id

这将检索所有用户和关联的配置文件条目。根据您真正需要的行或配置文件条目,您可以使用附加的 where 子句限制此查询。

如果您希望用户和关联的配置文件条目在一行中,您可以将配置文件条目与group_concat

select u.*, group_concat(p.profile_key, '=', p.profile_value)
from #__users u
left join #__user_profiles p on p.user_id = u.id
group by u.id
于 2012-11-30T20:59:50.920 回答
3

最后我决定采用数据透视表方法

例子:

SELECT
    #__users.*,
    MAX(CASE WHEN profile_key = "example.firstname" THEN profile_value END) AS FirstName,
    MAX(CASE WHEN profile_key = "example.lastname" THEN profile_value END) AS LastName,
    MAX(CASE WHEN profile_key = "example.company" THEN profile_value END) AS Company
FROM #__users LEFT JOIN #__user_profiles ON #__users.id = #__user_profiles.user_id
GROUP BY #__users.id

这使我可以将所有额外的用户数据放在一行中,以便我可以轻松排序和过滤。

于 2012-12-07T10:30:22.690 回答