我正在为我的网站写一个非常小的论坛..我真的不想使用vb和其他论坛系统。
所以
topics ( title , id )
posts ( text , id , topic_id )
有一个页面显示给定用户的所有条目(帖子)
在此页面上,每个用户帖子,我都会显示主题名称和该帖子的简短摘要
这是问题
当我单击主题名称时..我不想转到主题的第一页。
我想要包含该特定帖子的确切页面。
所以我去了职位编号(说666)
我可以使用它来获取主题信息(可以说标题:
topic A
)这样我就可以获取
topic A
中的帖子总数可以说
$total_posts_intopic = 250 ;
$per_page = 15 ;
我现在需要的是
post #666
的偏移量以找出页码那么我如何获取
#666
帖子之间的帖子topic A
的偏移量?还是有更简单的方法做到这一点?
注意:帖子666的意思是所有主题均未发布在
topic A
中,总共666 最佳答案
有关完整的演示,请参见this SQL Fiddle。
下面是我使用的查询(适合您的示例)。想法是,您填写topic_id
(我目前有topic_id = 1
的地方)和帖子的id
(我目前有id = 666
的地方)。结果将是一个数字,该数字指示给定帖子在给定主题中的位置。
要确定页码,可以使用:
$pageNumber = floor(($queryResult - 1) / $postsPerPage);
查询:
SELECT
currentCount
FROM
(
SELECT
id,
@counter := @counter + 1 AS currentCount
FROM
posts,
(SELECT @counter := 0) AS countTable
WHERE
topic_id = 1
) AS associatedCountTable
WHERE
id = 666;
该查询的工作方式如下:
posts表与一个计数器变量交叉连接。之所以可行,是因为在MySQL“创建”
0
(当它查看countTable
子句时)将变量设置为FROM
,并且每次选择一行时该变量都会增加1(因为SELECT
子句)为每个结果行“执行”。因为
WHERE
子句(选择正确的主题)是在SELECT
子句之前“执行”的,所以只有您感兴趣的主题中的行才会增加计数。前面步骤的结果是一个新表
associatedCountTable
,其中所选主题的每个帖子都有一行。每行在第一列中都有帖子的id
,在第二列中有一个简单递增的计数器,名为currentCount
。最后的
WHERE
子句使用上表,并为您感兴趣的帖子的id
(在示例中为666
)选择该行的计数器列。关于php - 选定行之间特定行的偏移量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18347197/