代码之家  ›  专栏  ›  技术社区  ›  Evgeniy Chorniy

在MySQL中从多个表中检索记录

  •  0
  • Evgeniy Chorniy  · 技术社区  · 8 年前

    表“用户”: 用户|用户名|电子邮件|登录|密码

    表“用户日志”

    表“用户余额”

    表“用户\角色” 角色| id |状态|角色|名称

    表“用户角色” 角色|用户| id

    如何通过用户电子邮件和日志状态以及用户角色检索所有记录

    输出: 日志时间戳|用户|用户名|电子邮件|角色|名称|余额|日志消息

    3 回复  |  直到 8 年前
        1
  •  1
  •   LukStorms    8 年前

    SELECT 
     log.timestamp AS log_timestamp, 
     u.user_id, 
     u.username AS user_name, 
     u.email AS user_email,
     role.name AS role_name,
     bal.amount AS balance_amount,
     log.message AS log_message
    FROM users AS u 
    JOIN users_role AS ur ON ur.user_id = u.user_id
    JOIN users_roles AS role ON role.role_id = ur.role_id
    JOIN users_log AS log ON u.user_id = log.user_id
    LEFT JOIN users_balance AS bal ON bal.user_id = u.user_id
    WHERE u.email = @UserEmail
      AND role.role_name = @RoleName
      AND log.status = @LogStatus
    

    但根据数据的不同,您可能需要添加 GROUP BY 和一个 aggregate function 比如MAX或SUM,或者WHERE或 HAVING 条款。

        2
  •  1
  •   JIJOMON K.A    8 年前

    你可以用 查询以从多个表中获取数据

    请试试这个,

    SELECT usr.*,usrlg.*,usrbl.*,usrrl.*,usrrls.* FROM users AS usr JOIN users_log AS usrlg ON(usrlg.user_id=usr.user_id) JOIN users_balance AS usrbl ON (usrbl.user_id=usr.user_id)
    JOIN users_role AS usrrl ON(usrrl.user_id=usr.user_id) JOIN users_roles AS usrrls ON(usrrls.role_id=usrrl.role_id)
     WHERE usr.email='value' AND usrlg.status='value' AND usrrls.role_name='value'