2016-04-19 3 views
0

コメントテーブルのオフセットリプレイテーブルMySQLは</p> <pre><code>+------+----------+ | id | comment | +------+----------+ | 1 | foo | | 2 | bar | | 3 | foobar | +------+----------+ </code></pre> <p>行

+------+----------+------------+ 
| id | replay |comment_id | 
+------+----------+------------+ 
| 1 | replay1 | 1   | 
| 2 | replay2 | 2   | 
| 3 | replay3 | 1   | 
+------+----------+------------+ 

SELECT 
    `comment`.`comment`, 
    `comment`.`id`, 
    (SELECT `replay`.`replay` FROM `replay` 
    WHERE `replay`.`comment_id` = `comment`.`id` 
    ORDER BY `replay`.`id` DESC LIMIT 1) AS `replay` 
FROM `comment` 

は結果がreplay3の

+----------+------+---------+ 
| comment | id | replay | 
+----------+------+---------+ 
| foo | 1 |replay3 | 
| bar | 2 |replay2 | 
| off | 3 |   | 
+------+----------+---------+ 

どのように私は(オフセット)の位置を取得することができますになり得ます、それが期待される2

replay1は1、それをオフセット、replay2オフセットは1とreplay3をオフセットされて、私は今、あなたのアイデアを得た2

+2

オフセットは、テーブル内の位置を意味しますか? 'ORDER BY'をしなければ、その位置は予測できません。時系列的な位置を意味すると仮定すると、 'DATETIME'カラムを追加する必要があります。 IDは必ずしもシーケンシャル/年代順の識別子ではありません。 – DanFromGermany

+0

@DanFromGermany年代順ではありません。リプレイのオフセットが必要です。 –

+0

は、「リプレイ」の値は常に「replayX」ですか?それでは、 "再生"を挿入せず、番号だけを挿入してください。 – DanFromGermany

答えて

0

です。あなたはどんなオフセットも意味しません。あなたは再生ごとのコメントの数(量)を意味します。

ここに私達は行く:私が代わりに副選択のJOINを使用したい既存のクエリで

SELECT 
    COUNT(*) AS amount 
FROM replays 
GROUP BY comment_id 

を...

SELECT 
* 
FROM comments c 
JOIN replays r ON c.id = r.comment_id 
ORDER BY r.id DESC 

あなたはまた、あなたの主なエンティティである気を付ける必要があります。

  • コメントはお送りしていますか?
  • リプレイにはコメントがありますか?
  • 各(リレーション)にはどれくらいの数のものがありますか?
+0

コメントのためのリプレイの数コメントのリプレイの2つの1つのコメント 今やコメントのためのリプレイのコメントまたは1つはこのようになります 1と2 オフセットまたは位置またはコメント2の再生のシリーズは1でなければならない 私はオフセットまたはシリーズを得る必要があります –

+0

シリーズまたはリプレイのランク –

関連する問題

 関連する問題