web-dev-qa-db-fra.com

Utilisation de GROUP_CONCAT dans une requête mysql avec la table wp_usermeta

J'ai une requête qui vise à renvoyer les détails de l'utilisateur à partir de tables Wordpress. Ce serait bien si je sélectionnais simplement les noms de colonne que je voulais, mais dans Wordpress, il y a une table usermeta qui a 2 colonnes - 1 appelée métakey et 1 appelée méta valeur.

Je souhaite obtenir certaines informations utilisateur à partir de clés méta, telles que prénom et nom, mais elles se trouvent toutes dans la même colonne - metavalue.

Voici ce que j'ai

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

Le problème est que cela ne renvoie qu'une seule ligne. Je pense que cela pourrait avoir quelque chose à voir avec la ligne:

AND wp_users.user_login = '$ spéc_user'

Où $ spéc_user est une valeur entrée par l'utilisateur.

Ce que je veux idéalement, ce sont toutes les lignes renvoyées où la colonne user_login est égale à celle entrée par l'utilisateur. Pas seulement de cette table, mais de la table usermeta.

1
JamesG

Que diriez-vous d'une requête pivot?

Cela renverrait les lignes avec prénom, nom, nom d'utilisateur. Vous pouvez ensuite ajouter la condition de votre choix à l'aide d'une clause 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
1
Ethan Seifert