2012-03-13 6 views
1

Wordpressテーブルからユーザーの詳細を返すクエリがあります。私が望むカラム名を選択していればうまくいくかもしれませんが、Wordpress内にはmetakeyと呼ばれる1カラムとメタ値と呼ばれる1カラムの2カラムを持つusermetaテーブルがあります。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']; 
    } 

問題は、これが1つだけの行を返し、です。

AND wp_users.user_login = '$spec_user' 

ここで、$ spec_userはユーザーが入力した値です。

私が理想的に言っているのは、user_login列がユーザーが入力した列と等しい場所に戻されるすべての行です。そのテーブルだけでなく、Usermetaテーブルから。

EDIT @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 

私は1つのクエリの値を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']; 

} 

私は姓と名が1つの配列name []に​​既に入れられています。しかし、私はどのようにしてそれを達成するのでしょうか?つまり、usermetaテーブルはDOBメタキーを列として扱いました。そのため、すべてのコンテンツを配列にプルすることができ、他のユーザーデータとしてsamme "row"に入ります。

+0

私はあなたが達成しようとしていることを説明するためのより良い仕事をする必要があると思います。おそらく、これらの表にある「このサンプルデータ」の形式の例では、「これらの結果」を検索したいと思います。 – nnichols

答えて

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

関連する問題