【发布时间】:2017-02-02 12:26:15
【问题描述】:
- 我正在尝试查询过去 3 年内活跃的用户。
- 我正在调整我多年来一直使用的查询,我知道它可以正常工作。我试图添加的查询的唯一部分是格雷码之外的部分。我无法正确理解这部分。
- 我正在查询 (lastactivity) 日期的列以 int(10) 格式存储,我认为我不会更改它,因为它是一个 VBulletin 列,我不希望该更改影响还有很多其他问题。
$query = "SELECT user.userid AS id3, user.lastactivity AS lastactivity1, DATE_FORMAT(FROM_UNIXTIME(user.lastactivity), '%Y %m %d') AS 'lastactivity2', socialgroup.groupid AS id1, socialgroupicon.groupid AS id2, socialgroupicon.dateline AS picdate, name, zip1, city1, state1, socialgroup.dateline AS groupdate, creatoruserid, members, picturecount, visible, paid
FROM socialgroup
LEFT JOIN socialgroupicon
ON socialgroupicon.groupid=socialgroup.groupid
LEFT JOIN user
ON user.userid=socialgroup.creatoruserid
WHERE type != 'inviteonly' AND state1 = '$region' AND lastactivity2
ORDER BY paid DESC, lastactivity2 DESC, id1 ASC
LIMIT 100
";
【问题讨论】:
-
请注意,如果
lastactivity2来自user表,则两个 LEFT JOIN 都将转换为 INNER JOIN。 -
我认为 LEFT JOINS 可能是个问题 - 确实如此。因此,我将其中一个 LEFT JOIN 更改为 INNER JOIN,并将另一个保留为 LEFT JOIN。我不得不不理会它,因为它正在过滤掉查询中的一些条目。我还必须切换它,所以我列出了 INNER JOIN 在代码中首先列出,而 LEFT JOIN 按顺序排列在第二位。谢谢。
标签: mysql