php - while() 中的 while() 还是 1x 查询?

我不知道哪种方式更适合 PHP 和 SQL。我设计并编写了自己的评论系统,我希望 id2=0 是评论,id2>0 是一个table 中的子评论。这意味着如果有人在 ID=1 的评论中写了子评论,那么 ID2 负责将(子评论)分配给 ID=1(评论)。我有一个像这样的 table comments

id | id2 | smt | etc.
1 | 0 | x | x //comment with sub-comment where id=3
2 | 0 | x | x //comment
3 | 1 | x | x //that is sub-comment for comment where id=1

我在 while 循环中显示这个,因为我需要打印评论中的所有数据。像这样:

$sqlkom="SELECT * FROM `comments` WHERE `id`='".$row['id']."' ORDER BY id DESC LIMIT 20";
if($resultkom = mysqli_query($con, $sqlkom)){
if(mysqli_num_rows($resultkom)){
while($rowkom = mysqli_fetch_assoc($resultkom)) {

echo HtmlFormatFunction($rowkom['id'],$rowkom['id2'],$rowkom['smt'],$rowkom['etc'])

我不会做到这一点: if($rowkom['id']==$rowkom['id2']) 没有添加另一个 while() 循环,对吧?或者修改SQL查询就可以达到这个效果?请帮助我找到正确的解决方案。

回答1

你可以加入你的 table 本身,像这样:

SELECT c.id, c.id2, c.smt, c.etc,
       s.id, AS s_id, s.id2 AS s_id2, s.smt AS s_smt, s.etc AS s_etc
FROM `comments` c LEFT JOIN `comments` s
ON c.id = s.id2
WHERE c.id = ?
ORDER BY c.id DESC LIMIT 20";

然后,您应该为第一条评论获得最少一行,或者为第一条评论获得尽可能多的行,因为有子评论。然后前四个字段将重复,但这不是问题。也许这并不完美。希望你能明白。

相似文章

go - golang 如何从字符串中查找表情符号?

我想查找表情符号是否存在并替换为字符串(HTMLunicode)。(符文到字符串)例如,这是句子“我喜欢你哈哈哈😀你好。”这就是结果。“我喜欢你哈哈哈😀你好。”表情符号和表情符号位置是随机的。我将...

php - 挣扎于数组 php 中的索引

从rapidapi获取json数据并尝试将其放入canvasjs图表中。我相信为什么我的图表不打印的问题是因为我创建的数组没有正确的索引。我的数组在所需的每个元素上都有索引0,它的索引为0-13。<!...

随机推荐

最新文章