Verwenden von GROUP CONCAT in der my-sql-Abfrage mit der Tabelle wp_usermeta

Ich habe eine Abfrage, die Benutzerdetails aus WordPress-Tabellen zurückgeben soll. Es wäre in Ordnung, wenn ich nur Spaltennamen wählen würde, die ich will, aber in WordPress gibt es eine Usermeta-Tabelle, die 2 Spalten hat – 1 namens Metakey und 1 genannt Meta-Wert.

Ich möchte bestimmte Bits von Benutzerinformationen aus Metaschlüsseln wie first_name und last_name erhalten, aber sie befinden sich alle in derselben Spalte – metavalue.

Hier ist was ich habe:

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

Das Problem ist, dass nur eine einzelne Zeile zurückgegeben wird. Ich denke, es könnte etwas mit der Linie zu tun haben:

UND wp_users.user_login = ‘$ spec_user’

Wobei $ spec_user ein vom Benutzer eingegebener Wert ist.

Im Idealfall werden alle Zeilen zurückgegeben, bei denen die Spalte user_login dem entspricht, was der Benutzer eingegeben hat. Nicht nur von dieser Tabelle, sondern auch von der usermeta-Tabelle.

Solutions Collecting From Web of "Verwenden von GROUP CONCAT in der my-sql-Abfrage mit der Tabelle wp_usermeta"

Wie wäre es mit einer Pivot-Abfrage?

Dies würde Zeilen mit dem Namen first_name, last_name, user_login zurückgeben. Sie könnten dann jede gewünschte Bedingung hinzufügen, indem Sie eine WHERE-Klausel verwenden.

  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