2016-09-24 21 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 YEAR)) ORDER BY paid DESC, lastactivity2 DESC, id1 ASC LIMIT 100 ";mysqlクエリ - 日付の減算

+0

注 'lastactivity2'が' user'テーブルからのものである、双方LEFTが参加した場合INNERにJOINを変換すること。 –

+0

私はLEFT JOINSが問題であるかもしれないと思っていました - それでLEFT JOINの1つをINNER JOINに変更し、もう1つをLEFT JOINとして残しました。私はまた、INNER JOINが最初にコードにリストされ、LEFT JOINが2番目にリストされているように、それを切り替える必要がありました。 – stocktrader

答えて

0

解決策は、WHERE節に追加しているlastactivity列がその表にあるため、ユーザー表のLEFT JOINをINNER JOINに変更する必要があるということでした。 (私はまた、「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年間を比較したいと考えていたが、違いはなく絶対タイムスタンプを比較していたと思われた。