3个表之间的MySQL关系

3个表之间的MySQL关系,mysql,join,Mysql,Join,我有3个表:用户、日志、日志项。一个用户有多个日志,一个日志有多个条目。看起来是这样的 假设有100个用户,每个用户有1000个日志,每个日志有1000个条目。这意味着log_entries表中将有100000行,当我想从日期x开始检查log时,它需要从100000行中筛选我想要的数据 请说明正确的解决方案是什么?您可以使用内部连接和CONCAT: SELECT * FROM Users U INNER JOIN Logs L ON U.UserId = L.UserId INNER

我有3个表:用户、日志、日志项。一个用户有多个日志,一个日志有多个条目。看起来是这样的

假设有100个用户,每个用户有1000个日志,每个日志有1000个条目。这意味着log_entries表中将有100000行,当我想从日期x开始检查log时,它需要从100000行中筛选我想要的数据


请说明正确的解决方案是什么?

您可以使用
内部连接
CONCAT

SELECT * 
FROM Users U
  INNER JOIN Logs L ON U.UserId = L.UserId
  INNER JOIN Log_Entries LE ON 
     CONCAT(L.UserId,'|',L.Session_Start) = LE.UserIdSession_Start

不过,我建议您更改表结构——这很奇怪。至少,在Logs表中添加一个Log\u Id,并在Log\u Entries表中包含该字段。

我想我应该在Logs中有一个auto inc主日志、session\u Id,这样每个用户/会话的日志中都有一个唯一的行,然后将其用作条目中的外键,一个更简单的join。如果Log\u Entries表中有大量行,可以吗?我不应该让它完全不同吗?谢谢。@LukAss741--我想在日志表(LogId)中添加一个自动增量字段。然后,您可以使用Log_Entries表中的该字段加入并删除第一个字段。上面的连接变得非常奇怪,特别是如果日期不是以完全相同的格式存储的(例如,您可能必须开始替换字符才能使上面的连接正常工作)。