gpt4 book ai didi

php - 如何获取表1中的所有记录和表2中的元数据?

转载 作者:行者123 更新时间:2023-11-29 10:18:17 25 4
gpt4 key购买 nike

我想知道是否有其他方法可以获取表1(users)中的所有记录和表2(user_meta)上的所有元数据,我现在正在使用这种方式:

SELECT 
u.id,
u.username,
u.email,
r.role,
(SELECT val FROM user_meta WHERE id_parent = u.id AND attr = 'sidebar_color' LIMIT 1) AS sidebar_color,
(SELECT val FROM user_meta WHERE id_parent = u.id AND attr = 'profile_pic' LIMIT 1) AS profile_pic,
(SELECT val FROM user_meta WHERE id_parent = u.id AND attr = 'thumbnail' LIMIT 1) AS thumbnail,
(SELECT val FROM user_meta WHERE id_parent = u.id AND attr = 'bg_img' LIMIT 1) AS bg_img,
(SELECT val FROM user_meta WHERE id_parent = u.id AND attr = 'bio' LIMIT 1) AS bio,
(SELECT val FROM user_meta WHERE id_parent = u.id AND attr = 'google' LIMIT 1) AS google,
(SELECT val FROM user_meta WHERE id_parent = u.id AND attr = 'facebook' LIMIT 1) AS facebook,
(SELECT val FROM user_meta WHERE id_parent = u.id AND attr = 'twitter' LIMIT 1) AS twitter,
(SELECT val FROM user_meta WHERE id_parent = u.id AND attr = 'whatsapp' LIMIT 1) AS whatsapp
FROM users u
LEFT JOIN roles r ON u.id_role = r.id
ORDER BY u.id
ASC

而且它正在工作,我从所有用户那里获取了所有数据,但我想要另一种方法,因为我将在 CRM 中使用相同的方法,但这个将拥有如此多的元数据,这将是一个巨大的数据查询来维护。

谢谢。

最佳答案

你的方法很好,而且在很多情况下是最快的。但聚合也是可行的:

SELECT um.id_parent,
MAX(CASE WHEN um.attr = 'sidebar_color' THEN val END) as sidebar_color,
MAX(CASE WHEN um.attr = 'profile_pic' THEN val END) as profile_pic,
. . .
FROM user_meta um
GROUP BY um.id_parent;

这通常是 FROM 子句中的子查询。

为了获取所有用户的信息,随着键的数量变大,这可能比JOIN方法更快。但是,如果您要过滤到一个或少数用户,则需要在聚合之前进行过滤以获得良好的性能。

关于php - 如何获取表1中的所有记录和表2中的元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49779205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com