Merging multiple rows into one row and multiple columns on mysql

后端 未结 3 1094
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-30 07:45

I am working in MYSQL and need to extract user data to be pulled into a view. I will be using the data in an email client, so I cannot do this in the app layer.

The

相关标签:
3条回答
  • The previous answer and comments give the correct solution. Here is the working query (in schema for WP 3.1) for copy and paste...

    SELECT distinct u.id, u.user_email,
       fn.meta_value AS first_name,
       ln.meta_value AS last_name
    FROM wp_users AS u
    LEFT JOIN wp_usermeta AS fn ON u.id = fn.user_id
       AND fn.meta_key = 'first_name'
    LEFT JOIN wp_usermeta AS ln ON u.id = ln.user_id
       AND ln.meta_key = 'last_name'
    
    0 讨论(0)
  • 2020-12-30 07:55

    Here is an another solution that doesn't need additional join operations, instead, we make use of group by statement along with case statement.

    select um.user_id,
           max(case when um.meta_key ='first_name' then um.meta_data end) AS first_name,  
           max(case when um.meta_key ='last_name' then um.meta_data end) AS last_name  ,
           max(case when um.meta_key ='email' then um.meta_data end) AS email
    from wp_usermeta um 
    group by user_id;
    

    Note the max function is just for making them into one row, you can use min as well.

    Check SQL Fiddler Demo here

    0 讨论(0)
  • 2020-12-30 07:57

    If these are the only columns you are concerned with, this will work for you:

    SELECT um.user_id
       , fn.meta_data AS first_name
       , ln.meta_data AS last_name
       , e.meta_data AS email
    FROM wp_userMeta AS um
    LEFT JOIN wp_user_Meta AS fn ON um.user_id = fn.user_id
       AND fn.meta_key = 'first_name'
    LEFT JOIN wp_user_Meta AS ln ON um.user_id = ln.user_id
       AND ln.meta_key = 'last_name'
    LEFT JOIN wp_user_Meta AS e ON um.user_id = e.user_id
       AND e.meta_key = 'email'
    
    0 讨论(0)
提交回复
热议问题