BY GROUPとし、なしを選択:MySQLはテーブルを結合する私は、次の2つのテーブルを持っている
CREATE TABLE messages (
messageId INT,
threadId INT,
recipientUserId INT,
message TEXT
);
CREATE TABLE thread_recipients (
recipientUserId INT,
threadId INT
);
私はメッセージテーブルから各スレッドのSELECT
特定のユーザーの最新のメッセージにしたいです。また、選択したスレッドの一部である他のすべてのユーザーをthread_recipientsテーブルから取得したいとします。
私は、次の動作だろうと思った:
SELECT MAX(m.messageId) AS maxMessageId, m.threadId, m.message
FROM messages AS m
RIGHT JOIN thread_recipients AS tr ON tr.threadId=m.threadId
WHERE m.recipientUserId='2'
GROUP BY m.threadId
しかしながら、GROUP BY
にしか関わらず、そのスレッドの一部であるユーザの数の、各スレッドIDのための一つの行を選択します。 1つのクエリで実行することも可能ですか?
どのレスポンダーにも親切です。 group by句なしで集約関数を呼び出すための
select max(messageId) over (partition by threadId) ...
は非常に便利で、あなたのケースのために完璧にフィット:
バックリンクはインラインコード用です。 [コードブロック](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)では、行を4つ余分なスペースでインデントします。エディタツールバーの "{}"ボタンはこれを行います。書式設定の詳細とヒントについては、エディタツールバーのオレンジ色の疑問符をクリックしてください。テーブル構造はSQL文で表示する必要があります。あなたはSQLだけを求めているので、PHPコードの一部として投稿する必要はありません。 – outis
'messages'と' thread_recipients'の 'recipientUserId'の違いは何ですか?彼らはどのように使われていますか? – outis
私はあなたのスキーマがここに何であるのか分かりません。 – Bohemian