Выбор нескольких строк в столбце в разные столбцы (SQL) - PullRequest
0 голосов
/ 23 мая 2018

У меня есть такая таблица в MySQL, которая называется wp_usermeta: (это приложение для WordPress, но я не хочу взаимодействовать с базой данных через WordPress, только через MySQL)

umeta_id    user_id     meta_key      meta_value
-------------------------------------------------------
1           1           nickname      Rymdblomma
2           1           firstname     Nile
3           1           lastname      White
4           1           description   Coolest person

и так далее.Я хочу выбрать все эти 4, но вместо этого поместить в 4 столбца.В то же время я выбираю данные из других таблиц, создавая временную таблицу со всеми атрибутами.

SELECT  wp_users.ID AS wp_id,
        wp_users.user_email AS email,
        wp_users.user_login AS username,
        wp_users.user_registered AS regDate,
        wp_blogs.path AS subname,
        wp_usermeta.meta_value AS firstname, 
        wp_usermeta.meta_value AS lastname
FROM    wp_users
INNER JOIN wp_blogs ON wp_users.ID = wp_blogs.blog_id
LEFT JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id AND 
(wp_usermeta.umeta_id = 2 OR wp_usermeta.umeta_id = 3);

(я хочу включить все мета-значения, а не только имя и фамилию, но я ограничил его до 2 для целей тестирования)

Это возвращает что-то вроде этого:

wp_id    email    username    regDate    subname    firstname    lastname
-------------------------------------------------------------------------
1        blabla   blabla      blabla     blabla     Nile         Nile
1        blabla   blabla      blabla     blabla     White        White

И так далее.Но я не хочу дублировать строки, вместо этого я хочу что-то вроде этого:

wp_id    email    username    regDate    subname    firstname    lastname
-------------------------------------------------------------------------
1        blabla   blabla      blabla     blabla     Nile         White

Я пытался везде искать любую помощь, но пока ничего не нашел.Любая помощь будет оценена.

Ответы [ 2 ]

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

Один метод использует условное агрегирование:

SELECT u.ID AS wp_id, u.user_email AS email, u.user_login AS username,
       u.user_registered AS regDate,
       b.path AS subname,
       MAX(CASE WHEN um.umeta_id = 2 THEN um.meta_value END) as firstname,
       MAX(CASE WHEN um.umeta_id = 3 THEN um.meta_value END) as lastname
FROM wp_users u INNER JOIN
     wp_blogs b
     ON u.ID = b.blog_id LEFT JOIN
     wp_usermeta umf
     ON u.ID = um.user_id AND 
        um.umeta_id IN (2, 3)
GROUP BY u.ID, u.user_email, u.user_login,
         u.user_registered, b.path;
0 голосов
/ 23 мая 2018

Чтобы получить имя и фамилию из wp_usermeta в одну строку, просто объедините таблицу дважды с различными условиями umeta_id = join

SELECT  wp_users.ID AS wp_id,
        wp_users.user_email AS email,
        wp_users.user_login AS username,
        wp_users.user_registered AS regDate,
        wp_blogs.path AS subname,
        metafirstname.meta_value AS firstname, 
        metalastname.meta_value AS lastname
FROM    wp_users
INNER JOIN wp_blogs ON wp_users.ID = wp_blogs.blog_id
LEFT JOIN wp_usermeta metafirstname ON wp_users.ID = metafirstname.user_id AND metafirstname.umeta_id = 2
LEFT JOIN wp_usermeta metalastname ON wp_users.ID = metalastname.user_id AND metalastname.umeta_id = 3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...