0

アプリに簡単なプライベート メッセージング システムを構築しようとしています。各メッセージを設定する方法には、それにthread_hash関連付けられた があります。互いに関連するメッセージは同じthread_hashです (他のメッセージへの返信であるメッセージはすべて同じですthread_hash) 。

各グループ (の) から最後に入力された行を選択するクエリを実行できますthread_hash私が達成したいのはthread_hash、別のクエリを作成せずに、特定の行数を持つ別の列を返すことです

行を生成するために使用しているクエリで SQL Fiddle を作成しました: http://sqlfiddle.com/#!2/1d8bd/4

私が持っている唯一の情報は、ユーザーの ID です。を持っていないthread_hashので、これは ID から生成する必要があります。行数を生成するためにいくつかのクエリをいじってみましたが、この時間は脳が正常に機能していません。

4

2 に答える 2

1

私はあなたがこのようなクエリを探していると信じています

SELECT COUNT(*) AS number_msg, thread_hash, from_user_id, mark_read, subject, SUBSTRING(message, 1, 65) as message, messages.time_stamp
FROM `messages`
WHERE `to_user_id` =  '28'
GROUP BY thread_hash
ORDER BY `messages`.`time_stamp` ASC
LIMIT 20 
于 2013-06-23T06:48:27.580 に答える
1

クエリは次のように記述できます。

SELECT
  thread_hash,
  from_user_id,
  mark_read,
  subject,
  SUBSTRING(message, 1, 65) as message,
  messages.time_stamp,
  cnt
FROM
  `messages`
  JOIN (SELECT MAX(messages.id) thead_id, COUNT(*) cnt
        FROM messages
        WHERE messages.to_user_id = 28
        GROUP BY thread_hash) thread_head
  ON `messages`.`id` = `thread_head`.`thead_id`
WHERE `to_user_id` =  '28'
ORDER BY `messages`.`time_stamp` ASC
LIMIT 20

フィドルはこちらです。

しかし、ユーザー 28 のメッセージだけをカウントする必要があるのか​​、それともすべてのメッセージをカウントする必要があるのか​​はわかりません。すべてのメッセージをカウントする必要がある場合は、サブクエリを次のように書き直すことができます。

(SELECT MAX(CASE WHEN messages.to_user_id = 28 THEN messages.id END) thead_id,
        COUNT(*) cnt
 FROM messages
 GROUP BY thread_hash) thread_head

ここでフィドルを参照してください。

于 2013-06-23T09:13:09.667 に答える