Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 墙贴和评论_Php_Mysql_Comments - Fatal编程技术网

Php 墙贴和评论

Php 墙贴和评论,php,mysql,comments,Php,Mysql,Comments,我为社交网站上的所有评论制作了一个表格:comment 此外,我还有一个表,用于将所有注释分配给一个注释:comment\u assign 因此,我构建了一个函数comment(),以便在每个节类型(图像、用户页、组等)中轻松实现它。在$_GET['s']==user的情况下,我希望有墙贴以及对这些墙贴的评论。全部存储在“注释”中 我用这个方案来展示: 1.sql查询以获取注释 2.html输出 3.此html输出中的另一个sql查询,用于获取注释的指定指定注释(本例中为wallpost) 现在

我为社交网站上的所有评论制作了一个表格:comment

此外,我还有一个表,用于将所有注释分配给一个注释:comment\u assign

因此,我构建了一个函数comment(),以便在每个节类型(图像、用户页、组等)中轻松实现它。在$_GET['s']==user的情况下,我希望有墙贴以及对这些墙贴的评论。全部存储在“注释”中

我用这个方案来展示: 1.sql查询以获取注释 2.html输出 3.此html输出中的另一个sql查询,用于获取注释的指定指定注释(本例中为wallpost)

现在的问题是,我的第一个查询显示所有注释。还有应该是子命令的注释。所以我的问题是,如果有任何方法可以在第一个查询中指定,当我得到所有注释时,可以说:Look in comment\u assign if this comment\u id可用。如果是,不要显示这个注释,因为它是一个子元素(我将在前面提到的步骤3中显示)

也许整个结构可能会改变?如果有任何建议,我将不胜感激。即使是很难实现的,但哪一个将是最有效的


表结构:

评论

id、uid、nid、站点、文本、日期

评论\u分配

注释\u id,分配\u id


第一个SQL查询示例,它无法避免显示所有注释(也是指定的注释)。请参见最后一行:

SELECT *    
FROM `comments` AS c
LEFT JOIN `comment_assign` AS ca ON ca.`comment_id` = c.`id` 
LEFT JOIN `users` AS u ON c.`uid` = u.`id` 

WHERE c.`nid`='".$nid."' 
AND c.`site`='".$_GET['s']."' 
AND ca.`comment_id` != c.`id`

如果我理解正确,您可以从comment表中选择所有注释。然后,您需要检查comment.id是否存在于comment\u assign.comment\u id中。如果存在,则它是一个子注释。对吗

您可以通过两种方式完成此操作-干净的方式是将另一个字段添加到comment表中,并将assign\u id放在那里,因为每个注释只能与另一个注释关联,或者是顶级注释(*assign\u id为NULL*)

或者,您可以左键联接两个表。assign_id为NULL的每一行都是墙注释,每一行都有一个值,这意味着它被指定为子注释。i、 e

SELECT id, uid, site, text, date
FROM comment
LEFT JOIN comment_assign ON (comment.id = comment_assign.comment_id)
WHERE comment_assign.assign_id IS NULL;

如果我将最后一行编辑为:“并且ca.
注释\u id
为空”,它会起作用。但是这两个查询的结构仍然不是很有效,我想,关于快速输出所有数据和编程效率,是吗?我应该改变我的表结构还是将这两个查询捆绑成一个?您好。谢谢你的来信。我刚才用同样的解决方案评论了我的问题。我读到,如果没有那么多情况下一个表行不填充数据,那么应该创建另一个表。这就是为什么我没有在“comment”表中添加一个名为assign_id的表行。所以,现在我很困惑,因为你说这是干净的方式。你知道我的意思吗?另外,就像我在顶部对我的问题所做的评论:你认为我应该改变我的表结构还是将这两个查询捆绑成一个?因为稍后我将有另一个while循环和SQL查询来显示这些子元素,也有一个SQL连接。对我来说,将字段添加到原始表中是有意义的。最有可能的是,最终你的子评论会比评论多,所以它不会那么空。但您将保存一个查找。如果要保存查询数据库并在代码中处理更多内容,可以选择所有注释,按assign_id对它们进行排序,然后按顺序解析数组。i、 e.循环遍历结果,输出原始注释,然后当assign_id不为NULL时,将记录作为子注释输出。