PHP MySQL,带页面的嵌套/线程注释,LIMIT 10 OFFSET等

时间:2012-06-07 06:27:19

标签: php mysql comments threaded-comments

我一直在寻找一个答案的答案,似乎无法找到一个,所以我希望有人在这里可以提供帮助..我只想找到一种方法,只在页面上显示XX评论,允许嵌套/线程注释的过程,并且当用户可能有超过1,000条注释时,不必显示一页上的所有注释。我正在尝试使用一个mysql查询,而不是2如果我必须这样做,我可以。

继承我的MySQL表(它还没有发布新表,所以我可以根据需要进行更改)

CREATE TABLE IF NOT EXISTS `comments_threaded` (
`id` bigint(255) NOT NULL AUTO_INCREMENT,
`toUid` bigint(255) NOT NULL,
`fromUid` bigint(255) NOT NULL,
`Pid` bigint(255) NOT NULL,
`Puid` bigint(255) NOT NULL,
`Pseen` int(2) NOT NULL,
`seen` int(2) NOT NULL,
`comment` text NOT NULL,
`tim` int(20) NOT NULL,
`Pip` varchar(30) NOT NULL,
PRIMARY KEY (`id`),
KEY `toUid` (`toUid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

id =评论自动增加的id toUid =用于其所在的配置文件/用户 fromUid =评论来自谁 Pid =父ID的id ..
Puid =父ID的用户ID号 Pseen =如果父用户已看到评论
看到=如果toUid已经看到评论
comment = fromUid留下的评论 蒂姆=剩下的时间() Pid =人员ip

anways,我正在尝试对用户个人资料发表评论,如果他们想要回复他们,他们会对上一个/父评论的回复进行嵌套。
我想将页面上的注释数量限制为10或20,无论我认为合适,这个数字还包括嵌套注释..

例如,如果我想在第1页上发表10条评论

comment 1
--comment 2 replied to comment 1
--comment 3 replied to comment 1
----comment 4 replied to comment 3
------comment 5 replied to comment 4
comment 6
--comment 7 replied to comment 6
--comment 8 replied to comment 6
comment 9
--comment 10 replied to comment 9

然后在第2页,如果第一个评论是对另一个评论的回复,那么它将以他们回复的原始父评论开头,如果完全能够在该页面上仍然只保留10条评论,如果如果在顶部显示额外的评论,或者可能显示在底部的第1页上的额外评论,那就没关系了。我不确定哪个会更容易。

comment 9
--comment 10 replied to comment 9
----comment 11 replied to comment 10
----comment 12 replied to comment 10
--comment 13 replied to comment 12
comment 13
comment 14
--comment 15 replied to comment 14
--comment 16 replied to comment 14
----comment 17 replied to comment 16
----comment 18 replied to comment 17
--comment 19 replied to comment 17
comment 20

我在想一个MySQL IN子句会这样做,但我收到一个错误..“试过 -

SELECT id, fromUid, Pseen, seen, comment, tim 
FROM comments_threaded 
WHERE toUid = '".mysql_real_escape_string($toUid)."' 
    OR Pid IN (
        SELECT id, fromUid, Pseen, seen, comment, tim 
        FROM comments_threaded 
        WHERE toUid = '".mysql_real_escape_string($toUid)."'
    ) 
LIMIT 10

并且一直在

Operand should contain 1 column(s)

我以前从未见过..

感谢您寻求帮助,如果可以的话!

1 个答案:

答案 0 :(得分:2)

如果在IN()中使用子查询,则该子查询必须选择1且仅选择1列。你的选择是6.

此外,对于这种嵌套内容,您可能需要考虑使用嵌套集模型。