Объединить несколько результатов таблицы MySQL в один - PullRequest
0 голосов
/ 31 мая 2018

Я пишу сайт WordPress, в котором есть петиция, мне нужно показать всех петиционеров по имени, стране и должности.

Но тема WordPress, которую я использую, настроена для хранения значений для пользователей петиции в нескольких строках (кажется, WordPress всегда делает это с пользователями).

каждый пользователь хранится как пользователь WordPress с ролью «петиционер».Мне удалось получить всех просителей, использующих этот запрос

SELECT display_name
     , meta_value
     , meta_key 
  FROM wp_users 
  JOIN wp_usermeta 
    ON wp_users.ID = wp_usermeta.user_id 
  WHERE meta_key = "petition_user_country" 
     OR meta_key = "petition_user_state" 
    AND meta_value !="" 
  ORDER 
     BY ID DESC;

Этот запрос теперь возвращает (только с тестовыми данными)

+--------------------------+------------+-----------------------+
| display_name             | meta_value | meta_key              |
+--------------------------+------------+-----------------------+
| Test3 Test34             | AF         | petition_user_country |
| Test3 Test34             | Tester     | petition_user_state   |
| Test Testnomsen          | NO         | petition_user_country |
| Test Testnomsen          | Student    | petition_user_state   |
| Brushan                  | NO         | petition_user_country |
| Kristian                 | Student    | petition_user_state   |
| Andreas Noe              | NO         | petition_user_country |
| Georg  Simone            | NO         | petition_user_country |
+--------------------------+------------+-----------------------+

Столбец meta_value содержит как позицию человека, так истрана, из которой ониМне нужна моя HTML-таблица, чтобы показать каждого человека как единое целое и отобразить страну, должность и имя.

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Вы можете использовать GROUP_CONCAT () :

SELECT display_name, GROUP_CONCAT(meta_value) AS meta_value,
       GROUP_CONCAT(meta_key) AS meta_value
FROM wp_users uw INNER JOIN 
     wp_usermeta um
     ON uw.ID = um.user_id 
WHERE meta_key IN ("petition_user_country", "petition_user_state") AND
      meta_value != "" 
GROUP BY display_name
ORDER BY ID DESC;
0 голосов
/ 01 июня 2018

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

SELECT display_name,
       MAX(CASE WHEN meta_key = 'petition_user_country' THEN meta_value ELSE NULL END) country,
       MAX(CASE WHEN meta_key = 'petition_user_state'   THEN meta_value ELSE NULL END) state,
FROM wp_users 
JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id 
WHERE meta_key IN('petition_user_country','petition_user_state')
  AND meta_value !="" 
GROUP BY display_name
ORDER BY display_name ASC;
0 голосов
/ 31 мая 2018

Дважды присоединитесь к wp_usermeta и включите требуемый metakey в предложение ON.

SELECT display_name
     , wpumc.meta_value country
     , wpums.meta_value state
  FROM wp_users 
  JOIN wp_usermeta wpumc
    ON wp_users.ID = wpumc.user_id 
       AND wpumc.metakey = 'petition_user_country'
  JOIN wp_usermeta wpums
    ON wp_users.ID = wpums.user_id 
       AND wpums.metakey = 'petition_user_state'
  WHERE wpumc.meta_value !=""  
    AND wpums.meta_value !=""     
  ORDER 
     BY ID DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...