________________________________
|oc_ct_forum_reply |
--------------------------------|
| forum_reply_id | forum_post_id|
|-------------------------------|
| 21 | 25 |
| 22 | 25 |
| 25 | 25 |
| 28 | 25 |
---------------------------------
我有一个名为oc_ct_forum_reply
的表,尝试使用以下sql查询找到第一个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
;
我需要一个sql查询,它给出了属于给定forum_reply_id
的已排序forum_reply_id
中给定forum_post_id
的位置。假设我提供forum_post_id
25和forum_reply_id
25,我希望查询返回3
作为第3个条目,或者说我提供的forum_post_id
为25和{ 28的{1}},我希望得到值forum_reply_id
作为第四个条目。我使用上面的两个查询尝试了各种组合。
答案 0 :(得分: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 强>
oc_ct_forum_reply t1
获取forum_reply_id = 25 AND t1.forum_post_id = 25
然后,我执行SELF JOIN
获取当前reply_id的号码
(通过获取forum_reply_id
小于或等于当前t1.forum_reply_id
且forum_post_id
t1
3 rows
的所有行
然后将它们分组
以上操作提取t1.forum_reply_id , t2.forum_reply_id
-----------------------------
25 , 21
25 , 22
25 , 25
,为
GROUP BY t1.forum_reply_id
最后,我只是total rows
并使用COUNT()聚合函数显示所请求的forum_reply_id
的{{1}}(25)
答案 1 :(得分: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;