【问题标题】:Mysql query for 3 tables & user metaMysql查询3个表和用户元
【发布时间】:2018-11-27 18:40:00
【问题描述】:

我正在尝试创建一个 mysql 查询以将 3 个数据表连接到一行中。但是,由于用户元表的布局方式,我遇到了一些问题。表结构如下:

用户

id       user_login       user_registered

1        user1            18/06/2018
2        user2            18/06/2018

用户元

user_id       meta_key       meta_value

1             color          blue
1             type           train
2             color          red
2             type           car

会员订阅

user_id       status

1             active  
2             active    

我想在今天的日期之前仅在 user_registered 上选择每个用户的 user_login,并将他们的 id 与 usermeta 表和 member_subscription 表的 user_id 连接,但仅在 member_subscription 表中的状态为 = 'active' 的情况下,以及还包括与每个用户相关的元数据,所以我最终得到以下结果:

user_login     color      type

user1          blue       train
user2          red        car

非常感谢任何帮助,因为我真的在努力解决这个问题。

【问题讨论】:

标签: mysql wordpress join meta


【解决方案1】:

我不确定这是否是最有效的方法,但如果您加入该表两次,则可以根据您的必要条件轻松过滤掉。类似的东西:

SELECT u.user_login, um1.meta_value AS color, um2.meta_value AS type
FROM users u 
LEFT JOIN usermeta um1 
     ON um1.user_id=u.id
     AND um1.meta_key='color'
LEFT JOIN usermeta um2 
     ON um2.user_id=u.id
     AND um2.meta_key='type'
JOIN member_subscription ms 
     ON ms.user_id=u.id
WHERE ms.status='active'

【讨论】:

    【解决方案2】:

    对于Entity–attribute–value model aka EAV 结构来列出不同列中的属性,您可以通过加入元表来使用基于属性的条件聚合

    SELECT u.id, 
           u.user_login, 
           MAX(CASE 
                 WHEN m.meta_key = 'color' THEN m.meta_value 
                 ELSE NULL 
               END) AS color, 
           MAX(CASE 
                 WHEN m.meta_key = 'type' THEN m.meta_value 
                 ELSE NULL 
               END) AS type 
    FROM   users u 
           JOIN usermeta m 
             ON m.user_id = u.id 
           JOIN member_subscription ms 
             ON ms.user_id = u.id 
    WHERE  ms.status = 'active' 
    GROUP  BY u.id, 
              u.user_login 
    

    Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      • 2013-07-25
      • 1970-01-01
      相关资源
      最近更新 更多