2016-09-24 2 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 ((), INTERVAL 3 년)) ORDER BY paid DESC, lastactivity2 DESC, id1 ASC LIMIT 100 ";mysql 질의 - 날짜 뺄셈

+0

참고. –

+0

LEFT JOIN이 문제가 될 수 있다고 생각했기 때문에 LEFT JOIN 중 하나를 INNER JOIN으로 변경하고 나머지는 LEFT JOIN으로 남겨 두었습니다. 일부 항목을 필터링했기 때문에 혼자 남겨 두어야했습니다 n 쿼리. 또한 INNER JOIN이 코드에서 첫 번째로 나열되었고 LEFT JOIN이 순서대로 나열되어 있으므로 전환해야했습니다. 감사합니다. – stocktrader

답변

0

해결책은 WHERE 절에 추가 할 lastactivity 열이 해당 테이블에 있으므로 사용자 테이블의 LEFT JOIN을 INNER JOIN으로 변경해야한다는 것입니다. (I는 또한에 "lastactivity"대신 lastactivity2 "로 변경해야합니다). lastactivity2`는`user` 테이블에서입니다 모두`경우 좌 INNER로 변환 조인됩니다 조인

$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 년을 오늘과 마지막 활동 사이의 시간 간격과 비교하려고했지만 다른 시간대가 아닌 절대 시간 소인을 비교했을 것입니다.