0

ステータステーブルで作業しています。ユーザーごとの基本情報と、ユーザーごとの最新のステータスの取得とユーザーごとのグループ化で問題が発生した場合に必要なフィルタリングを示します。

したがって、使用する必要のあるステータステーブル情報は次のとおりです。

  • ID
  • コンテンツ
  • ユーザーID

使用する必要のあるユーザー情報は次のとおりです。

  • ID
  • locationID

したがって、私が達成したいのは、ユーザーごとにグループ化された各ユーザーの最新のステータスです。

私が使用していたもの:

SELECT ID, content
    FROM status
    WHERE content NOT RLIKE "#[0-9azA-Z]"
    AND type = "5"
    AND userID IN (
        SELECT DISTINCT ID
        FROM users
        WHERE hometownID = "'.$locationID.'"
        OR locationID = "'.$locationID.'"
    )
    GROUP BY status.userID
    ORDER BY addedDate DESC

そして、すでに追加されたユーザーの配列を使用してPHPでユーザーごとにグループ化し、それらを除外していましたが、これはスケールアップして後でより多くの結果をロードするのに理想的ではないため、SQLのみのソリューションが必要です。

前もって感謝します。

4

2 に答える 2

1

2番目にSQLFiddleを試してください

select s.userid, s.content, r.addeddate
from status s
join (select s.userid, max(s.addeddate) as addeddate
      from status s
      join users u on s.userid = u.id
      where u.hometownid = 2
            and u.locationid = 3
            and s.type = '5'
            and s.content not rlike '#[0-9a-zA-Z]'
      group by userid) r on s.userid = r.userid
                            and s.addeddate = r.addeddate;
于 2012-11-21T15:38:52.037 に答える
0

これは私のために働いています!

SELECT *
FROM status
NATURAL JOIN (
    SELECT userID, MAX(addedDate) as addedDate
    FROM status
    GROUP BY userID
) AS mostRecent
WHERE userID IN (
    SELECT DISTINCT ID
    FROM users
    WHERE users.locationID = "'.$locationID.'"
    OR users.hometownID = "'.$locationID.'"
)
AND status.content NOT RLIKE "#[0-9azA-Z]"
AND type = "5"
#AND userID != "'.$userID.'"
ORDER BY status.addedDate DESC
LIMIT 10
于 2012-11-21T15:48:09.980 に答える