我拥有一个图片博客(类似于9gag),我想建立一个线程评论系统。我明白要走的路是拥有一个闭包表,所以我建立一个。
我的问题是:按顺序获取注释树的SQL查询是什么(并避免对perf有影响的嵌套SELECT查询)?
评论表:
image_id
comment_id
comment_text
comment_date
comment_parent_id
Comments_tree表:
ancestor
descendant
depth
image_id
答案 0 :(得分:1)
首先,我认为他的表没有正确规范化我认为你应该使用comment_id作为主键。
对于你的问题,问题不在于PHP打印树的难度。
您可以选择comment_parent_id为null的所有内容:
app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', '$httpProvider', 'authService',
function ($stateProvider, $urlRouterProvider, $locationProvider, authService) {
if (authService.auth == false) {
$urlRouterProvider.otherwise(function ($injector, $location) {
var $state = $injector.get("$state");
$state.go("login");
});
}
else {
$urlRouterProvider.otherwise(function ($injector, $location) {
var $state = $injector.get("$state");
$state.go("home");
});
}
}]);
我现在按名称排序,对于下一个查询,只需使用父评论的ID:
SELECT comment_text FROM comments_table WHERE comment_parent_id IS NULL ORDER BY comment_date DESC;
您可以使用PHP变量SELECT comment_text FROM comments_table WHERE comment_parent_id = $parentCommentId ORDER BY comment_date DESC;
来保存父评论的ID。
完成所有这些之后,你只需要正确输出它!