我正在Joomla 2.5中创建一个用户配置文件插件来扩展标准用户字段。
问题是我需要一种通过MySQL查询检索用户(以及额外字段)的有效方法。目前我能想到的最好的方法是查询#__user_profiles表并处理该数据以确定要加载的额外字段,然后生成一个查询,在每个额外用户字段的#__user_profiles表上创建单独的连接。
显然效率不高,在大型用户群上查询速度很慢。
有没有更好的方法将作为另一个表中的单独记录的额外用户字段组合成一个查询?
编辑:
我有一个外部脚本,需要抓取所有用户及其扩展字段,因此我需要合并#_ 用户和# _user_profiles表
答案 0 :(得分: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
答案 1 :(得分: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
这允许我将所有额外的用户数据放在一行中,这样我就可以轻松订购和过滤。