我已经搜索并找到了在查询中进行查询的方法,但我找不到正确的答案。
我要做的是从名为users_profiles_comments
的表中获取评论,并通过这样做我将得到'.$member["author"].'
的字段。然后我想用他们的排名和显示图片来显示谁发表了评论。
但是因为注释表中没有存储用户详细信息,因为它用于注释,我需要在查询结果中创建一个查询,我可以这样:
"SELECT * FROM users WHERE username = $member['author'] ORDER BY `id` ASC"
'。$ member [" author"]。'值来自主查询,但我需要它,所以它可以在我的用户表中找到字段。
$sql = "SELECT * FROM users_profiles_comments WHERE postid = '1' ORDER BY `id` ASC";
$stm = $dbh->prepare($sql);
$stm->execute();
$users = $stm->fetchAll();
foreach ($users as $row) {
print '
<img src="'.$member["profilepic"].'" style="float:left;margin-right:10px;" width="80px" height="85pxm">
<h4>'. $row["author"] .'
<small>'. $row["date"] .'</small>
</h4>
<p>'. $row["content"] .'</p><hr> </a></li>';
}
echo '
</div>
';
我希望你明白。
编辑: 数据库。
用户表 http://img855.imageshack.us/img855/4387/qyjl.png
users_profiles_comments表 http://i.imgur.com/aKRF5MN.png
答案 0 :(得分:2)
但是因为评论表中没有存储用户详细信息,因为它用于评论
这很好。您不希望在两个表中都重复数据库信息(反标准化数据) - 没有必要。
通常会将外键添加到关系的反面。这意味着您的user_id
表格中有一个comments
列,您可以使用JOIN
SELECT comment.*, user.name AS comment_author
FROM comment
INNER JOIN user ON user.id = comment.user_id
WHERE user.id = 123
修改 - 我转到JOIN
以返回评论而不是用户,(正如您所说的“提取评论”)但是这两种方式都有效,它只取决于哪一方面你的关系。
编辑2 回复您的评论;
我如何才能在结果上显示我的PHP代码?
您可以使用上述查询(不使用*
)更具体,并按如下方式呈现:
$sql = "
SELECT
comment.`date` as comment_date,
comment.content,
user.name AS author_name,
user.profilepic as author_pic
FROM
users_profiles_comments as comment
INNER JOIN
user ON user.id = comment.user_id
WHERE
comment.postid = 1
";
//...
$comments = $stmt->fetchAll();
foreach ($comments as $comment) {
echo '<img src="' . $comment['author_pic'] . '"/>';
echo '<h4>' . $comment['author_name'] . '<small>' . $comment['comment_date'] .'</small></h4>';
echo '<p>' . $comment['content'] . '</p>';
}
答案 1 :(得分:0)
我的理解是你需要根据用户ID从另一个名为user_profile_comments的表中获取有关用户的信息(如果错误,请纠正我:--))。使用left outer JOIN
从另一个表中获取数据,限制用户ID。
有关详细信息,请参阅http://www.w3schools.com/sql/sql_join.asp。
答案 2 :(得分:0)
您可以在SQL语句中选择成员名称。您可以尝试此查询,如果users.username
= users_profiles_comments.author
方式1:
SELECT t1.*, t2.* FROM
(
SELECT * FROM users WHERE username = '.$member["author"].' ORDER BY `id` ASC
) AS t1
LEFT JOIN
(
SELECT * FROM users_profiles_comments WHERE postid = '1' ORDER BY `id` ASC
) AS t2
ON t1.username = t2.author
最后,执行foreach
打印
===================================================================
第2道:
你也可以试试这个 -
SELECT *,
(SELECT profilepic FROM users WHERE users.username = users_profiles_comments.author) AS profilepic
FROM users_profiles_comments WHERE postid = '1' ORDER BY `id` ASC
使用profilepic
$row['profilepic']
打印foreach loop
=====================================================================
第3道:
SELECT t1.*, t2.* FROM
(
SELECT * FROM comments WHERE postid = '1'
) AS t1
LEFT JOIN
(
SELECT * FROM users
) AS t2
ON t1.author = t2.username