2016-09-24 102 views
0
  • 我想查詢過去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'和lastactivity2 < UNIX_TIMESTAMP(DATE_SUB(NOW(),間隔3年)) ORDER BY paid DESC, lastactivity2 DESC, id1 ASC LIMIT 100 ";mysql查詢 - 日期扣除

+0

注意,如果'lastactivity2'是從'user'表,無論是LEFT JOIN的將被轉換爲內部連接。 –

+0

我認爲LEFT JOINS可能是一個問題,因此我將其中一個LEFT JOIN改爲INNER JOIN,另一個作爲LEFT JOIN。我不得不放棄它,因爲它過濾了一些條目n查詢,我也必須切換它,所以我列出了INNER JOIN在代碼中第一個列出,而第二個是LEFT JOIN,謝謝。 – stocktrader

回答

0

解決方案是,我需要將用戶表上的LEFT JOIN更改爲INNER JOIN,因爲我在該表中添加了WHERE子句的最後一個活動列。 (我還需要改變它爲「lastactivity」,而不是「lastactivity2)。

$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 INNER JOIN user ON user.userid=socialgroup.creatoruserid LEFT JOIN socialgroupicon ON socialgroupicon.groupid=socialgroup.groupid WHERE type != 'inviteonly' AND state1 = '$region' AND lastactivity > UNIX_TIMESTAMP(DATE_SUB(now(), INTERVAL 3 YEAR)) ORDER BY paid DESC, lastactivity2 DESC, id1 ASC LIMIT 100 ";

1

,如果你試圖讓那名在過去3年中的活動項目,你的比較應該是一個更大比:

lastactivity2 > UNIX_TIMESTAMP(DATE_SUB(now(), INTERVAL 3 YEAR)) 

時間前進,新的時代比舊時代更大。

您可能認爲您想比較3年與今天和上次活動之間的時間間隔,但是您正在比較絕對時間戳,而不是差異。