[英]Selecting multiple rows in a column into different columns (SQL)
我在MySQL中有一个名为wp_usermeta的表:(这是一个wordpress应用程序,但我不想仅通过MySQL与之通过wordpress与数据库进行交互)
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,而不仅仅是名字和姓氏,但出于测试目的,我将其限制为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
我试图在任何地方搜索任何帮助,但还没有找到任何东西。 任何帮助,将不胜感激。
一种方法使用条件聚合:
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;
要将wp_usermeta中的名字和姓氏放入一行,只需使用不同的umeta_id =连接条件将表连接两次
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.