Как я могу получить SQL запрос из таблиц WordPress - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть запрос sql, и я не могу найти правильное решение.

Запрос работает, но он не показывает мне столбцы таблицы wp_usermeta, только столбцы wp_users отображаются.

Если я удаляю предложение where, отображаются все строки со всеми значениями столбцов, но мне нужны только строки в зависимости от meta_value = "Prod" из столбца meta.key = 'kennung_produzent'

SELECT p.ID,
       p.user_login,
       p.user_registered,
       p.display_name,
        max( CASE WHEN pm.meta_key = 'nickname' and p.ID = pm.user_id THEN pm.meta_value END ) as Nickname,
        max( CASE WHEN pm.meta_key = 'billing_email' and p.ID = pm.user_id THEN pm.meta_value END ) as email,
        max( CASE WHEN pm.meta_key = 'billing_first_name' and p.ID = pm.user_id THEN pm.meta_value END ) as Vorname,
        max( CASE WHEN pm.meta_key = 'billing_last_name' and p.ID = pm.user_id THEN pm.meta_value END ) as Nachname,
        max( CASE WHEN pm.meta_key = 'billing_phone' and p.ID = pm.user_id THEN pm.meta_value END ) as Telefon,
        max( CASE WHEN pm.meta_key = 'billing_postcode' and p.ID = pm.user_id THEN pm.meta_value END ) as PLZ,
        max( CASE WHEN pm.meta_key = 'billing_address_1' and p.ID = pm.user_id THEN pm.meta_value END ) as Strasse,     
        max( CASE WHEN pm.meta_key = 'billing_city' and p.ID = pm.user_id THEN pm.meta_value END ) as Ort,
        max( CASE WHEN pm.meta_key = 'kennung_produzent' and p.ID = pm.user_id THEN pm.meta_value END ) as Kennung

from
    wp_users p 
    join wp_usermeta pm on p.ID = pm.user_id
where  
    pm.meta_value = 'Prod'
group by
    p.ID

1 Ответ

0 голосов
/ 11 апреля 2020

Если я правильно понимаю, вы хотите отфильтровать результат только для тех, для которых в wp_usermeta есть строка с meta_key='kennung_produzent' и meta_value = 'Prod'

То, что делает этот запрос, отличается, потому что вы фильтруете по pm.meta_value = 'Prod', поэтому вы удаляете все строки, потому что он также ожидает, что значение будет равно Prod, когда pm.meta_key = 'billing_email', а когда pm.meta_key = 'nickname' и так далее.

Не зная ваших данных и основываясь на вашем последнем комментарии, предполагая, что у вас более одной строки на пользователя с meta_key = "kennung_produzent", я бы сказал, что то, что вы хотите сделать, больше похоже на

select * from (

SELECT p.ID,
       p.user_login,
       p.user_registered,
       p.display_name,
        max( CASE WHEN pm.meta_key = 'nickname' and p.ID = pm.user_id THEN pm.meta_value END ) as Nickname,
        max( CASE WHEN pm.meta_key = 'billing_email' and p.ID = pm.user_id THEN pm.meta_value END ) as email,
        max( CASE WHEN pm.meta_key = 'billing_first_name' THEN pm.meta_value END ) as Vorname,
        max( CASE WHEN pm.meta_key = 'billing_last_name' THEN pm.meta_value END ) as Nachname,
        max( CASE WHEN pm.meta_key = 'billing_phone' THEN pm.meta_value END ) as Telefon,
        max( CASE WHEN pm.meta_key = 'billing_postcode'  THEN pm.meta_value END ) as PLZ,
        max( CASE WHEN pm.meta_key = 'billing_address_1' THEN pm.meta_value END ) as Strasse,     
        max( CASE WHEN pm.meta_key = 'billing_city' THEN pm.meta_value END ) as Ort,
        max( CASE WHEN pm.meta_key = 'kennung_produzent' THEN pm.meta_value END ) as Kennung

from
    wp_users p 
    join wp_usermeta pm on p.ID = pm.user_id
group by
    p.ID

) a

where Kennung LIKE "Prod"

производительность этого запроса может быть очень плохой, но, пожалуйста, дайте мне знать, если он делает то, что вам нужно, по крайней мере, у нас есть отправная точка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...