2012-03-13 57 views
1

我有一個查詢是爲了從Wordpress表中返回用戶詳細信息。如果我只是選擇了我想要的列名,那很好,但是在Wordpress中,有一個usermeta表,它有2列--1個稱爲metakey,1個稱爲元值。在my-sql查詢中使用GROUP CONCAT和wp_usermeta表

我想從元鍵(如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表。

編輯 @nnichols,我大概didnt去properely解釋它...

這是用戶表:

ID userlogin password email  date-registered 
2  jay   xxxxxx  [email protected] 1/2/12 
5  pete   xxxxxx  [email protected] 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 metakey作爲一個列處理,因此我可以將所有內容都拉到數組中,並且與其他用戶數據一樣在samme「行」中。

+0

我認爲你需要更好地解釋你正在努力實現的目標。也許在這些表格中給出'這個樣本數據'的形式的一個例子,我想檢索'這些結果'。 – nnichols 2012-03-14 01:41:19

回答

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

看到下面的圖片... enter image description here