在带有wp_usermeta表的MY-SQL查询中使用GROUP CONCAT

时间:2012-03-13 作者:JamesG

我有一个查询,用于从Wordpress表返回用户详细信息。如果我只是选择我想要的列名,那就好了,但在Wordpress中有一个usermeta表,它有两列,一列称为metakey,一列称为MetaValue。

我想从元键(如first\\u name和last\\u name)中获取某些用户信息,但它们都在同一列-metavalue中。

以下是我所拥有的:

    $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\']; 
    }
问题是,这只返回一行。我认为这可能与线路有关:

和wp\\U用户。user\\u登录名=“$spec\\u user”

其中,$spec\\U user是用户输入的值。

理想情况下,我希望返回所有行,其中user\\u login列等于用户输入的内容。不仅来自该表,还来自usermeta表。

1 个回复
最合适的回答,由SO网友:Ethan Seifert 整理而成

数据透视查询怎么样?

这将返回具有first\\u name、last\\u name、user\\u login的行。然后可以使用WHERE子句添加任何需要的条件。

            SELECT

                    MAX(CASE WHEN wp_usermeta.meta_key = \'first_name\' then wp_usermeta.meta_value ELSE NULL END) as first_name,
                    MAX(CASE WHEN wp_usermeta.meta_key = \'last_name\' then wp_usermeta.meta_value ELSE NULL END) as last_name,
                    wp_users.user_login

                    FROM wp_users

                    LEFT JOIN wp_usermeta
                    ON wp_users.ID = wp_usermeta.user_id

                    GROUP BY wp_users.user_login

结束