Выбор нескольких строк в столбце в разные столбцы (SQL)

0

У меня такая таблица в 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);

(Я хочу включить все meta_values, а не только first & lastname, но я ограничил его до 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

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

  • 0
    Я не вижу дубликатов ...
Теги:

2 ответа

1
Лучший ответ

Чтобы получить имя и фамилию из 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;
  • 0
    О боже, теперь я чувствую себя так глупо. Большое спасибо, это решение идеально подходит (и работает)!
2

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

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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню