我有一个查询,从一个表中获取网站访问日志。然后,我加入了另外两个表,以便获取用户的所有信息。此时,查询就可以了。
慢速查询:然后,我必须使用一个子查询,以便根据条件获得某个日期的访问日志。正是这个子查询导致整个查询几乎停止。30-40秒后,查询将完成。
表:
查询:
SELECT COUNT(*) AS visits , table1.userName, table2.userId, table2.col1, table2.col2, table2.col3, table2.col4, table3.col20
FROM table1
LEFT JOIN table2 ON table2.userName = table1.userName
LEFT JOIN table3 ON table3.col2 = table1.col2
WHERE table1.col1 = 'foo'
AND table1.Date > (
SELECT max(a.VisitDate) FROM table4 a
WHERE a.userId = table2.userId AND a.col1 = 'bar'
)
GROUP BY table1.userName, table1.Date我没有构建这个数据结构,也没有选择去改变它。我将此查询解析为一个基本的PDO函数。
发布于 2016-10-11 07:56:43
您可以尝试使用内部连接(在子选择上)
SELECT
COUNT(*) AS visits
, table1.userName
, table2.userId
, table2.col1
, table2.col2
, table2.col3
, table2.col4
, table3.col20
FROM table1
LEFT JOIN table2 ON table2.userName = table1.userName
LEFT JOIN table3 ON table3.col2 = table1.col2
INNER JOIN (
SELECT max(a.VisitDate) as max_visit_date FROM table4 a
WHERE a.userId = table2.userId AND a.col1 = 'bar'
) t on table1.Date > t.max_visit_date
GROUP BY table1.userName, table1.Date;https://stackoverflow.com/questions/39972658
复制相似问题