可以从MYSQL中选择所有行,然后用PHP处理,并以JSON的形式返回有限的行数吗?
我正在创建一个有帖子和评论部分的网站。我对Evan Miller解释的“Bernoulli参数的Wilson分数置信区间下界”排序算法非常感兴趣 而且,我的注释系统有嵌套注释。我如何将注释存储在MYSQL中的可以从MYSQL中选择所有行,然后用PHP处理,并以JSON的形式返回有限的行数吗?,php,mysql,Php,Mysql,我正在创建一个有帖子和评论部分的网站。我对Evan Miller解释的“Bernoulli参数的Wilson分数置信区间下界”排序算法非常感兴趣 而且,我的注释系统有嵌套注释。我如何将注释存储在MYSQL中的postscomments表中,如下所示 Id | ParentId | Comment | PostId | ... 1 NULL Parent Comment 1 2 1 Child comment
postscomments
表中,如下所示
Id | ParentId | Comment | PostId | ...
1 NULL Parent Comment 1
2 1 Child comment 1
3 2 Grand Child comment 1
插入、更新和删除只是小菜一碟
选择是最糟糕的事情。让我告诉你我需要如何选择它
当我收到对我的get comments.php
文件的AJAX请求时,我需要获取特定帖子的评论。(AJAX请求发送post ID)。因此,我需要选择根据该算法排序的帖子的评论
但是,问题是,我只需要选择30个家长评论,每个家长选择5个子评论。我不确定在MYSQL查询中如何同时进行排序和分组。这是我试过的
- 它不起作用有两个原因。我无法将结果分组到父级,也无法限制结果。(递归内部不支持限制)
- 我试了一些。但是,它们也不起作用
{
"parent": [
// sorted parent comments
{
"Id": 4,
"UserId": 2,
"PostId": 1,
// and other comment data
},
{
// another comment
}
],
"4": [
// sorted array of children of comment 4
{
// comment 4's child
},
{
// comment 4's child
}
],
"6": [
// sorted array of children of comment 6
]
}
有没有一种方法可以让我首先对该算法上的注释进行排序,然后使用MYSQL查询仅选择前30个父注释,每个父注释仅选择5个子注释?(如果我可以这样做,我可以使用PHP将结果分组到这个JSON)每次存储新投票时,请执行以下操作:
顺便说一句,第一部分可能是可选的,但由于您使用优先级将搜索查询一分为二,并且可能同时在同一行上使用它,因此它也会变快,因为您每次向上投票/向下投票只计算一次,而不是每次发布详细信息请求计算一次或两次。您给了我们很多信息,但我实际上没有看到一个明确的问题陈述。确切的问题是什么?我的问题是,选择所有行和进程是否可以。如果没有,是否有更好的方法可以直接从MYSQL中选择所需的行?答案是,通常情况下,与PHP相比,您可以在MYSQL上尽可能多地处理数据。也就是说,您应该尝试使用MySQL上的查询来处理您的需求。如果您发布的是清晰的表输入和预期的输出,也许有人可以帮助您。@SupunKavinda在第2步中,我特意对结果进行了排序,以便将较旧的注释放在第一位,这样您就可以迭代结果,让家长总是排在孩子之前。然后把它们放在这样一个数组结构中:实际上,考虑到它可能不需要是一个树,这可能就足够了:[1=>[2,3],2=>[5,8],3=>[4,6,7],4=>[],5=>[],6=>[],7=>[]](键是父id,值是所有直接子id的数组)就像现在的例子一样,如果你想让所有id的注释都以父id 1开头-你可以这样做,把1放在bucket中,获取子id(2,3),然后一个接一个地把它们也放在bucket中,寻找它的子id(2有5和8,3有4,6,7),如果它有,重复这个过程-把他们也放进桶里,然后寻找他们的孩子再次重复这个过程。。。直到所有的孩子都被扔进垃圾桶,分支中没有更多的评论,才会有更多的孩子。组合到branhes中可能会产生这样的结果:[1=>[1,2,3,4,5,6,7,8],2=>[2,5,8],3=>[3,4,6,7],4=>[4],5=>[5],6=>[6],7=>[7],8]]-这里的键是一个注释的ID和该分支中所有注释ID的值数组。只选择步骤1中返回的键作为parentID,并在步骤4中插入值数组作为查询的in(?)参数,或者,实际上它们不应该包含自己作为子对象,所以类似这样:[1=>[2,3,4,5,6,7,8],2=>[5,8],3=>[4,6,7],4=>[],5=>[]、6=>[]、7=>[]、8=>[]]或者他们,idk现在,你将必须计算:)希望你得到了一般的想法…无论如何,让我再说一件事,这种方法是调查一个主题中的所有行(或多或少),就像你做的一样,不同之处在于,这种方法只调查所有行中的两列(实际上,可能只有索引用于