MySQL Correct WHERE clause with a value pair table like Wordpress usermeta

user2448544 :

I am trying to select data from a wordpress usermeta table of some members. I have managed to use this SQL and this works by listing all the users

SELECT 
wpdg_usermeta.user_id,
MAX(CASE when wpdg_usermeta.meta_key = 'firm_name' THEN wpdg_usermeta.meta_value ELSE NULL END) AS firm_name,
MAX(CASE when wpdg_usermeta.meta_key = 'member_name' THEN wpdg_usermeta.meta_value ELSE NULL END) AS member_name,
MAX(CASE when wpdg_usermeta.meta_key = 'firm_address' THEN wpdg_usermeta.meta_value ELSE NULL END) AS firm_address,
MAX(CASE when wpdg_usermeta.meta_key = 'firm_city' THEN wpdg_usermeta.meta_value ELSE NULL END) AS firm_city,
MAX(CASE when wpdg_usermeta.meta_key = 'member_email' THEN wpdg_usermeta.meta_value ELSE NULL END) AS member_email,
MAX(CASE when wpdg_usermeta.meta_key = 'member_directory' THEN wpdg_usermeta.meta_value ELSE NULL END) AS member_directory
FROM wpdg_usermeta
GROUP BY wpdg_usermeta.user_id

However I want to filter only those members that agreed to appear in the member directory, so I tried to add this

WHERE
wpdg_usermeta.meta_key = 'member_directory' AND wpdg_usermeta.meta_value IN ('Yes')

However, then I get 2 rows which do have member_directory = Yes, which is correct, but all the other fields in the results except user_id are Null

also tried

wpdg_usermeta.meta_key = 'member_directory' AND wpdg_usermeta.meta_value = 'Yes'

Same result

Sorry, haven't tried selecting from a value pair table before and I'm a bit stumped

Gordon Linoff :

You can use a having clause instead:

having member_directory is not null

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=8163&siteId=1