2014-09-23 144 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。