如何获取并展示用户收到的其他用户提交的评价?附数据库表结构
搞定用户资料页展示关联评价的问题
嘿,我来帮你解决这个在用户个人资料页展示其他用户评价的问题!结合你给出的两张表结构,咱们一步步来:
1. 先搞定核心的数据库查询逻辑
要把评价和对应的评价者信息关联起来,咱们需要用JOIN把avis表和users表连起来——毕竟avis里的user_id是提交评价的人,关联users表就能拿到评价者的姓名、头像这些信息,这样展示的时候用户才知道是谁评的。
给你个现成的SQL查询语句,直接用就行:
SELECT a.id AS avis_id, a.comment, u.id AS reviewer_id, u.name AS reviewer_name, u.photo AS reviewer_photo FROM avis a JOIN users u ON a.user_id = u.id WHERE a.profile_id = :profile_id -- 这里填当前访问的用户ID(就是被评价的人) ORDER BY a.id DESC; -- 按评价时间倒序,最新的评价放最前面
简单解释下:这条语句会把所有给指定用户(profile_id)的评价都查出来,同时带上每个评价者的基本信息,完美适配你的需求。
2. 后端拿数据的示例(以PHP/PDO为例)
假设你用PHP做后端,这里给你个获取数据的代码片段,你可以根据自己的框架调整:
// 先拿到当前访问的用户ID,比如从URL参数或者会话里取 $profile_id = $_GET['user_id']; // 比如你的资料页URL是user.php?user_id=123 try { // 连接数据库,替换成你自己的数据库信息 $pdo = new PDO('mysql:host=localhost;dbname=你的数据库名', '用户名', '密码'); // 准备刚才的SQL语句 $stmt = $pdo->prepare("SELECT a.id AS avis_id, a.comment, u.id AS reviewer_id, u.name AS reviewer_name, u.photo AS reviewer_photo FROM avis a JOIN users u ON a.user_id = u.id WHERE a.profile_id = :profile_id ORDER BY a.id DESC"); // 绑定参数,防止SQL注入 $stmt->bindParam(':profile_id', $profile_id, PDO::PARAM_INT); $stmt->execute(); // 把查询结果存成数组,方便前端用 $reviews = $stmt->fetchAll(PDO::FETCH_ASSOC); } catch(PDOException $e) { // 出错了就提示一下 echo "数据库出错啦: " . $e->getMessage(); }
这样$reviews数组里就存了所有该用户收到的评价,以及每个评价者的信息。
3. 前端展示评价的代码示例
拿到数据后,在用户资料页里循环展示就行,这里给你个HTML+PHP的混合示例,你可以改成你用的模板引擎(比如Blade、Twig):
<div class="user-reviews-section"> <h3>大家的评价</h3> <?php if(empty($reviews)): ?> <p class="no-reviews">还没有人给TA评价哦~</p> <?php else: ?> <?php foreach($reviews as $review): ?> <div class="review-card"> <div class="reviewer-info"> <!-- 评价者头像 --> <img src="<?php echo $review['reviewer_photo']; ?>" alt="<?php echo $review['reviewer_name']; ?>" class="reviewer-avatar"> <!-- 评价者姓名 --> <span class="reviewer-name"><?php echo $review['reviewer_name']; ?></span> </div> <!-- 评价内容,记得用htmlspecialchars转义,防止XSS攻击 --> <p class="review-content"><?php echo htmlspecialchars($review['comment']); ?></p> </div> <?php endforeach; ?> <?php endif; ?> </div>
这里要注意用htmlspecialchars()处理评论内容,避免恶意脚本注入,安全第一!
几个容易踩坑的地方提醒你
- 别搞反关联字段:是
avis.user_id关联users.id,不是profile_id,不然就把被评价者的信息重复显示了 - 处理空评价的情况:如果用户还没收到任何评价,要给个友好提示,别让页面空着
- 权限控制(可选):如果需要的话,记得限制只有登录用户能提交评价,或者评价需要审核后再展示
内容的提问来源于stack exchange,提问作者Labelle Doriane
相关产品推荐
相关产品推荐

