users", ARRA-6ren">
gpt4 book ai didi

mysql - WordPress 列表结果来自 wp_users 和 wp_usermeta

转载 作者:行者123 更新时间:2023-11-29 09:02:42 25 4
gpt4 key购买 nike

我正在编写一个插件,它使用...从 WordPress 数据库中获取一组数据

$data = $wpdb->get_results("SELECT * FROM $wpdb->users", ARRAY_A);      

这工作正常,我可以显示用户表中的所有信息,我遇到的问题是我还需要提取 wp_usermeta 表中的名字和姓氏。

有没有办法修改语句以从另一个表中提取这些详细信息?

最佳答案

不是在一个查询中,也不一定是最流畅的,但以下将产生您想要的结果:

$data = $wpdb->get_results("SELECT * FROM $wpdb->users", ARRAY_A);  
$i = 0;
foreach($data as $single) {
$meta = $wpdb->get_results(
"SELECT meta_value
FROM $wpdb->usermeta
WHERE user_id = $single[ID]
AND (meta_key = 'first_name' OR meta_key = 'last_name')
ORDER BY meta_key",
ARRAY_A
);
$data[$i]['first_name'] = $meta[0]['meta_value'];
$data[$i]['last_name'] = $meta[1]['meta_value'];
$i++;
}

编辑:这是在一个查询中:

$data = $wpdb->get_results(
"SELECT $wpdb->users.*,
GROUP_CONCAT(
$wpdb->usermeta.meta_value
ORDER BY $wpdb->usermeta.meta_key
SEPARATOR ' '
) AS name
FROM $wpdb->users
LEFT JOIN $wpdb->usermeta
ON $wpdb->users.ID = $wpdb->usermeta.user_id
WHERE ($wpdb->usermeta.meta_key = 'first_name'
OR $wpdb->usermeta.meta_key = 'last_name')
GROUP BY $wpdb->users.ID",
ARRAY_A
);

请注意,与第一个版本相反,后者不会生成 $data[x]['first_name']$data[x]['last_name'],但改为 $data[x]['name']。这是由于存储在“meta_value”列中。不可能在一个查询中完成您的任务并将名字和姓氏同时存储在两个不同的数组键中。

因此,如果采用第二种方式,则必须使用 php 的 explode()稍后使用函数来访问该名称。或者在运行查询后循环更正它:

$i = 0;
foreach($data as $single) {
$name_parts = explode(' ', $single['name']);
$data[$i]['first_name'] = $name_parts[0];
$data[$i]['last_name'] = $name_parts[1];
$i++;
}

关于mysql - WordPress 列表结果来自 wp_users 和 wp_usermeta,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8114955/

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