加入两个表(一个需要连接)

时间:2014-09-23 23:50:23

标签: php mysql

我在wordpress数据库中有两个表。 一个表是"用户"并包含列: ID,user_url,user_email

我需要将其加入第二个表格" 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");

然而,当打印/回显结果时," echo $ row [' 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将它连接到另一个表,然后能够打印电子邮件,网址和连接的值#34; Customer_Address"

我尝试了各种组合和子查询,但似乎无法使这项工作

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您使用的是wordpress CMS,则应查询以下wordpress标签: 获取用户的所有元数据:

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

您可以通过$ all_meta_for_user数组获取first_name和last_name

或者如果您只获取first_name和last_name,则可以尝试:

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

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