0
________________________________
|oc_ct_forum_reply              |
--------------------------------|
| forum_reply_id | forum_post_id|
|-------------------------------|
|  21            |  25          |
|  22            |  25          |
|  25            |  25          |
|  28            |  25          |
---------------------------------

次のSQLクエリでoc_ct_forum_reply最初のものを見つけようとしているという名前のテーブルがあります。forum_reply_id

  SELECT forum_reply_id
    FROM oc_ct_forum_reply
   WHERE forum_post_id = 25
ORDER BY reply_added
   LIMIT 1
       ;

別のものを使用して、forum_post_id の返信の総数を取得します。

  SELECT COUNT(*) AS total
    FROM oc_ct_forum_reply
   WHERE forum_post_id = 25
       ;

指定された に属するforum_reply_idソートされた の中で指定された の位置を示す SQL クエリが必要です。たとえば、 25 と25 を指定して、3 番目のエントリとしてクエリを返したいとします。または、25 と28 を指定して、4 番目のエントリとして値を取得したいとします。上記の 2 つのクエリを使用して、あらゆる種類の組み合わせを試しました。forum_reply_idforum_post_idforum_post_idforum_reply_id3forum_post_idforum_reply_id4

4

2 に答える 2

4

これはうまくいくはずです

SELECT 
  t1.forum_reply_id,
  count(t2.forum_reply_id) as reply_number
FROM
  oc_ct_forum_reply t1
  JOIN oc_ct_forum_reply t2 ON ( t1.forum_reply_id >= t2.forum_reply_id AND t1.forum_post_id = t2.forum_post_id )
WHERE
  t1.forum_reply_id = 25
  AND t1.forum_post_id = 25
GROUP BY
  t1.forum_reply_id 

SQLFIDDLE

働く

  1. oc_ct_forum_reply t1を持つ行を取得しますforum_reply_id = 25 AND t1.forum_post_id = 25

  2. 次に、現在の reply_id の番号SELF JOINを取得します (現在の番号と同じかそれ以下 のすべての行を取得し、 それらをグループ化することによって)forum_reply_idt1.forum_reply_idforum_post_idt1

上記のアクションは fetch3 rowsとして

t1.forum_reply_id , t2.forum_reply_id 
-----------------------------
 25               , 21                
 25               , 22                
 25               , 25                

最後に、 COUNT()集計関数をGROUP BY t1.forum_reply_id使用して、要求された( 25 )のプレゼントを表示します。total rowsforum_reply_id

于 2013-04-19T18:12:31.930 に答える
0

別の方法:

SELECT rownum FROM
(
SELECT @rownum:=@rownum+1 rownum, oc_ct_forum_reply.* 
FROM (SELECT @rownum:=0) r, oc_ct_forum_reply
) result_table
WHERE FORUM_REPLY_ID = 25;

http://sqlfiddle.com/#!2/5df2f/29

于 2013-04-19T18:42:50.513 に答える