У меня такая таблица в 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
Я пробовал искать везде для любой помощи, но ничего не нашел. Любая помощь будет оценена по достоинству.
Чтобы получить имя и фамилию из 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;
Один метод использует условную агрегацию:
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;