2014-09-23 113 views
0

我有一个wordpress数据库中的两个表。 一表“用户”,包含列: ID,user_url,USER_EMAILJOIN两个表(一个需要连接)

我需要加入这其中包含列的第二台“usermeta”: USER_ID,meta_key,meta_value但需要有行首先连接在一起。

user_id meta_key meta_value 
1  first_name Joe 
1  last_name Smith 
2  first_name Jane 
2  last_name Doe 

需求,成为

user_id meta_key    meta_value 
1  first_name,last_name Joe,Smith 
2  first_name,last_name Jane,Doe 

我已经能够使用连接表:

$result = mysql_query("SELECT * FROM users 
INNER JOIN usermeta ON usermeta.user_id = users.ID 
GROUP BY usermeta.user_id"); 

然而,在打印时/呼应的结果,“回声$行['meta_value “];”只返回给定ID的第一行。

,如果我不群吧,我结束了对每个多行user_id说明

我可以用做串接工作:

$result = mysql_query("SELECT user_id, GROUP_CONCAT(meta_value) AS Customer_Address 
FROM usermeta 
WHERE usermeta.meta_key='first_name' 
or usermeta.meta_key='last_name' 
or usermeta.meta_key='paupress_address_one_1' 
or usermeta.meta_key='paupress_address_city_1' 
or usermeta.meta_key='paupress_address_state_1' 
or usermeta.meta_key='paupress_address_postal_code_1' 
or usermeta.meta_key='user_type' 
or usermeta.meta_key='telephone' 
or usermeta.meta_key='paupress_field_business' 
GROUP BY user_id"); 

但是,这个方案不给我访问到第一张桌子。我需要一种方法来连接一个表,并根据用户ID将其连接到另一个表,然后能够打印电子邮件,网址和连接的“Customer_Address”的值。我尝试了各种组合和子查询,但是却尝试了各种各样的组合和子查询似乎无法使这项工作

回答

0

你只需要结合你的第一个查询和你的第二个查询。这里是一个浓缩版:

SELECT u.user_id, 
    u.email, 
    u.url, 
    GROUP_CONCAT(meta_value) AS customer_address 
FROM user u 
    JOIN usermeta um ON u.user_id = um.user_id 
WHERE um.meta_key IN ('first_name','last_name') 
GROUP BY u.user_id 
+0

这工作完美!我昨天花了12个小时......谢谢soooooo! – 2014-09-24 19:08:43

0

如果你正在使用WordPress的CMS,你要查询遵循WordPress的标签: 获取所有元数据的用户:

$all_meta_for_user = get_user_meta(1); 
print_r($all_meta_for_user); 

你可以得到FIRST_NAME并通过$ LAST_NAME all_meta_for_user阵列

,或者如果你只得到FIRST_NAME和姓氏,你可以试试这个:

echo $user_last = get_user_meta(1, 'first_name', true); 
echo $user_last = get_user_meta(1, 'last_name', true); 

要获取所有用户的元数据,可以使用循环和更改user_id。