Ich versuche, eine einzelne Abfrage zum Abrufen von Informationen aus der Haupttabelle (WordPress-Benutzertabelle) und der Benutzermetatabelle zu erstellen.
Wenn Sie mit der WP DB-Architektur nicht vertraut sind: wp_users enthält grundlegende Benutzerinformationen und ihre IDs, wp_usermeta enthält die ID, meta_key und meta_value.
Nehmen wir an, ich möchte alle Benutzer abrufen, die bestimmte meta_keys und meta_values haben. Dies ist die Abfrage, die ich derzeit habe (generiert über PHP basierend auf verfügbaren meta_keys):
SELECT ID,
user_email,
user_login,
first_name.meta_value as first_name,
last_name.meta_value as last_name,
phone_number.meta_value as phone_number,
wp_capabilities.meta_value as wp_capabilities
FROM wp_users,
(select * from wp_usermeta where meta_key = 'first_name') as first_name,
(select * from wp_usermeta where meta_key = 'last_name') as last_name,
(select * from wp_usermeta where meta_key = 'phone_number') as phone_number,
(select * from wp_usermeta where meta_key = 'wp_capabilities') as wp_capabilities
WHERE
ID = first_name.user_id AND
ID = last_name.user_id AND
ID = phone_number.user_id AND
ID = wp_capabilities.user_id AND
wp_wpi_capabilities.meta_value LIKE '%administrator%'
ORDER BY first_name
Dies macht einen guten Job, aber wenn einem bestimmten Benutzer ein meta_key fehlt, beispielsweise „last_name“, wird diese Benutzerzeile überhaupt nicht zurückgegeben. Also wirklich alles, was ich brauche, ist eine Möglichkeit, einen Nullwert für fehlende Metaschlüssel zurückzugeben.
Im Moment habe ich eine sehr hackige Funktion, die durchläuft und leere meta_keys und meta_values für alle Benutzer erstellt, die keinen bestimmten meta_key haben, auf diese Weise werden sie zurückgegeben. Dies ist jedoch eine schreckliche Methode, wenn Sie über tausend Benutzer haben und einen neuen Typ von meta_key hinzufügen müssen.
Lassen Sie mich wissen, wenn jemand dies getan hat, oder wenn ich es besser erklären muss.
Danke.
Warum nicht die ersten 3 zu einem richtigen LEFT Join machen? gerade jetzt machen Sie richtige Joins ….
– Wrikken
17. September 2010 um 12:47 Uhr