0

私はコーディングしているソーシャル ネットワークを持っていますが、それは他のものとは少し異なります。この場合、フィード セクションにはユーザーごとに 1 つのステータスしか表示されません。

したがって、最新のものを上にして日付でステータスを並べ替える必要がありますが、残念ながらユーザーIDでグループ化する必要があります....

これは私の現在のクエリです:

SELECT *
FROM status
WHERE userID != "83" #This is just so my statuses don't show
GROUP BY userID
ORDER BY addedDate DESC
LIMIT 10

最新のステータス結果が表示されることを期待しており、代わりに最初のステータスが表示されるため、グループ化は機能していますが、順序付けは機能していません。

前もって感謝します。

4

3 に答える 3

2

Robin's answerへのコメントで述べたように、MySQL は各グループから常に最新のステータスを返すことを保証しないため、そのアプローチは信頼できません。代わりに、(に基づいて) 最新のステータスを選択するサブクエリを使用して、テーブルを結合する必要がありますaddedDate

SELECT   *
FROM     status
  NATURAL JOIN (
    SELECT   userID, MAX(addedDate) as addedDate
    FROM     status
    GROUP BY userID
  ) AS mostRecent
ORDER BY addedDate DESC
LIMIT    10

ユーザーが同じaddedDate. このような状況を制御する必要がある場合は、そのようなステータス更新を選択する方法を定義する必要があります。

于 2012-05-11T12:10:14.573 に答える
1
SELECT userID, max(addedDate)
FROM status
WHERE userID != "83" #This is just so my statuses don't show
GROUP BY userID
于 2012-05-11T11:24:59.183 に答える
1
SELECT *
FROM (  SELECT *
        FROM status
        WHERE userID != "83"
        ORDER BY addedDate DESC) AS h
GROUP BY userID
ORDER BY addedDate DESC
LIMIT 10

GROUP BY する前に ORDER BY する必要があります。

例 1
例 2

于 2012-05-11T11:23:34.503 に答える