以下mysql查询旨在将多个表连接在一起,并根据给定表的时间对每个表进行计数。
SELECT
COUNT(DISTINCT s.id) AS textcnt,
COUNT(DISTINCT f.id) AS favcnt
FROM stream_updates s
LEFT JOIN favorites f
ON f.username=s.username
INNER JOIN members m
ON m.username=s.username
WHERE (m.username = 'testuser1'
AND (m.username IN (
SELECT friend2 as username FROM list_friends
WHERE (friend1 = 'testuser1' AND friend2 <> 'testuser1')
)) OR (m.username IN (
SELECT friend1 as username FROM list_friends
WHERE (friend2 = 'testuser1' AND friend1 <> 'testuser1')
))) AND (s.time between (NOW() - INTERVAL 1 DAY) AND NOW()
OR (f.time between (NOW() - INTERVAL 1 DAY) AND NOW()))
出于某种原因,上述ALWAYS返回零。
以下是一个示例查询: http://sqlfiddle.com/#!9/a88f1e/1
示例中的查询应该返回:
textcnt: 2 // id's 1 and 4 from the stream_updates table
favcnt: 1 // id 1 from the favorites table
而是两个计数都返回0
请理解你是否建议重写我实际上用LEFT JOIN计算5个表的查询,为了简单起见,我只是将其删除了。
我也很难正确编写WHERE子句。它需要检查成员表中是否存在用户,如果是,则对用户执行查询。然后,它需要检查用户是否在list_friends表中,如果是,则进一步对用户的朋友执行查询。我担心我写它的方式会检查以确保两者都在发生。但是,如果我将它从AND更改为OR,我遇到的问题是,如果用户在成员表中,查询将不执行OR。
更新CLARIFY WHERE CLARUSE
我正在尝试在where子句中执行以下操作:
首先获取会员的所有计数&#39; testuser1&#39;
其次,如果testuser1在list_friends中列出的朋友也包括他们在计数中的结果。
第三,基于&#39;时间&#39;过去24小时的每个表的基本结果。它被张贴了。
附加注意,我还有其他查询,我抓住过去48小时减去过去24小时(因此结果来自2天前,但不是今天)...并且它继续,所以请不要重写这样的它会抓住过去的24小时&#34;因为那时我会在别处申请它会抓住#34;过去48小时&#34;不是&#34;从2天前24小时&#34;。