如何获取mysql中的条目计数

时间:2013-04-19 18:07:00

标签: php mysql

________________________________
|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作为第四个条目。我使用上面的两个查询尝试了各种组合。

2 个答案:

答案 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

工作

  1. oc_ct_forum_reply t1获取forum_reply_id = 25 AND t1.forum_post_id = 25

  2. 然后,我执行SELF JOIN获取当前reply_id的号码 (通过获取forum_reply_id小于或等于当前t1.forum_reply_idforum_post_id t1 3 rows的所有行  然后将它们分组

  3. 以上操作提取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;

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