我有一个查询,用于从Wordpress表返回用户详细信息。如果我只是选择我想要的列名,那就好了,但在Wordpress中有一个usermeta表有2列 - 1个叫metakey,1个叫meta值。
我想从元键(例如first_name和last_name)获取某些用户信息,但它们都在同一列中 - 元数据。
这就是我所拥有的:
$allquery="SELECT $comma_separated, wp_usermeta.meta_value, wp_usermeta.meta_key,
//comma_seperated are a list of values to search for seperate by ",". this is name, email
GROUP_CONCAT(
wp_usermeta.meta_value
ORDER BY wp_usermeta.meta_key
) AS name
FROM wp_users
LEFT JOIN wp_usermeta
ON wp_users.ID = wp_usermeta.user_id
WHERE (wp_usermeta.meta_key = 'first_name'
OR wp_usermeta.meta_key = 'last_name')
AND wp_users.user_login = '$spec_user'
GROUP BY wp_users.ID";
$names = array();
$allresult=mysql_query($allquery) or die(mysql_error());
while($rows=mysql_fetch_array($allresult)){
$names[] = $rows['name']; //name is from the group_concat in query
$emails[] = $rows['user_email'];
}
问题是,这只返回一行。我认为这可能与该行有关:
AND wp_users.user_login = '$spec_user'
其中$ spec_user是用户输入的值。
理想情况下,返回的所有行都是user_login列等于用户输入的行。不仅来自该表,还来自usermeta表。
EDIT @nnichols,我可能没有去解释它... ...
这是用户表:
ID userlogin password email date-registered
2 jay xxxxxx xxx@xxx.xcom 1/2/12
5 pete xxxxxx xxxx@xxx.com 2/2/12
这是usermeta表:
umetaid userid meta_key meta_value
122 2 first_name james
123 5 first_name peter
155 2 last_name jones
167 5 last_name gould
168 2 DOB 16/8/89
190 5 DOB 23/5/70
所以我试图将单个查询中的值拉到PHP循环中,这样我就可以将它们添加到数组中了:
$names = array();
$dob = array();
$allresult=mysql_query($allquery) or die(mysql_error());
while($rows=mysql_fetch_array($allresult)){
$names[] = $rows['name']; //name is from the group_concat in query
$emails[] = $rows['user_email'];
$dob[] = $rows['custom_field_dob'];
}
我已将名字和姓氏放入一个数组中,名称为[]。但是我如何实现它,所以基本上usermeta表将DOB元关键字处理为一个列,所以我可以将所有内容拉到数组,并作为其他用户数据在samme“row”中。
答案 0 :(得分:0)
您可以使用以下sql来实现您的目标,可能需要更改表名,字段名等......
SELECT distinct(user.id),
(SELECT GROUP_CONCAT(u2.meta_value SEPARATOR ' ') FROM usermeta as u2 where u2.user_id=user.id and (u2.meta_key='first_name' OR u2.meta_key='last_name')) AS name,
user.email as user_email,(SELECT u3.meta_value from usermeta u3 where u3.user_id=user.id and u3.meta_key='DOB') AS custom_field_dob
FROM user, usermeta WHERE usermeta.user_id = user.id
见下图...