我正在编写一个插件,它使用...
从wordpress数据库中获取数据$data = $wpdb->get_results("SELECT * FROM $wpdb->users", ARRAY_A);
这很好用,我可以显示users表中的所有信息,我的问题是我还需要提取wp_usermeta表中的名字和姓氏。
有没有办法修改语句以从其他表中提取这些细节?
答案 0 :(得分:2)
不是在一个查询中,也不一定是最简单的,但以下内容将产生您想要的内容:
$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++;
}