我有一个查询,旨在从Wordpress表中返回用户详细信息。如果我只是选择想要的列名,那会很好,但是在Wordpress中有一个usermeta表,该表有2列-1个称为metakey,1个称为meta value。

我想从元密钥(例如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,我可能没有适当地解释它...

这是用户表:

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'];

}


我已经将名字和姓氏放入一个数组中,即names []。但是我如何才能做到这一点呢,例如,usermeta表实际上将DOB元键视为一列,因此我可以将所有内容拉到数组中,并作为其他用户数据放在samme“行”中。

最佳答案

您可以使用以下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

见下图...

关于php - 在带有wp_usermeta表的mysql查询中使用GROUP_CONCAT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9693099/

10-09 00:44