gpt4 book ai didi

php - 连接评论列表的表并确定用户是否已经对评论投了赞成票/反对票

转载 作者:行者123 更新时间:2023-11-29 12:20:36 42 4
gpt4 key购买 nike

我一直在为自己的项目构建评论系统,目前确定当前登录用户是否对评论投票(赞成或反对)的方式不是很......聪明。现在,每次要显示评论时,我都会查询数据库,这对于每页超过 100 条评论来说并不理想。这意味着 100 多个额外查询。

我尝试使用 JOIN、LEFT JOIN 和 LEFT OUTER JOIN,但我自己不知道如何做到这一点。我尝试过的任何方法都没有给我带来我需要的结果。

这是我想到的,但我不知道如何只合并用户投票的值。

$q_get_comments = $conn->prepare('
SELECT comments.id,
comments.parent,
comments.subpage,
comments.author_id,
comments.author,
comments.message_cut,
comments.regdate,
comments.points,
votes_comments.user_id,
votes_comments.user_name,
votes_comments.comm_id,
votes_comments.direction
FROM comments LEFT JOIN votes_comments
ON comments.id = votes_comments.comm_id
WHERE comments.subpage= :subpage
ORDER BY points DESC, regdate DESC');

$q_get_comments->execute(array(':subpage' => $sub_id));

我的 table 是这样设置的:

评论

id parent subpage author_id author message message_cut ip regdate points up down
------------------------------------------------------------------------------------------
1 0 68 6 name msg <p>msg</p> x date 5 4 0
2 0 68 6 name msg <p>msg</p> x date 3 2 0
3 2 68 6 name msg <p>msg</p> x date 2 3 2

投票

id  user_id  user_name  comm_id  direction
------------------------------------------
1 6 Chris 2 0
2 6 Chris 3 2
3 6 Chris 1 1

votes.comm_idcomments.id 匹配,这就是我尝试加入表格的方式。

但我只想加入 user_id = 6 的结果,并且仍然显示子页面的所有评论,并且只添加..比如说.. user_id方向评论中的相应结果

我需要的结果以及最后的方向值来确定投票状态。

id parent subpage author_id author message message_cut ip regdate points up down direction
------------------------------------------------------------------------------------------
1 0 68 6 name msg <p>msg</p> x date 5 4 0 0
2 0 68 6 name msg <p>msg</p> x date 3 2 0 NULL
3 2 68 6 name msg <p>msg</p> x date 2 3 2 2

如果方向为 NULL,或者可能为空白字段,则用户不会对此评论进行投票,如果它具有他所做的值,或者类似的内容。(在代码方向0表示撤销/中立投票,1表示赞成票,2表示反对票,所以如果存在方向,我可以知道用户以某种方式对此评论进行了投票,并且我可以显示他的投票的正确html)

预先感谢您提供的任何帮助或提示!

最佳答案

只需进行 2 个查询(sudo 代码,仅显示 sql,而不是实际的数据库调用)来选择评论和投票,然后将结果合并到 php 中:

$comments = $db->prepare('SELECT * FROM comments WHERE subpage = :subpage');
$comments->execute(array('subpage' => $subpage_id));

$commentsById=array();
foreach($comments as $comment)
$commentsById[$comment['id']]=$comment

$votes = $db->prepare('SELECT * FROM votes WHERE user_id = :user_id AND comm_id IN (' . implode(",", array_keys($commentsById)) . ')');
$votes->execute(array('user_id' => $user_id)); // the user_id of the user

foreach($votes as $vote)
$commentsById[$vote['comm_id']]['direction'] = $vote['direction'];

var_dump($commentsById);

关于php - 连接评论列表的表并确定用户是否已经对评论投了赞成票/反对票,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29085061/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com