查询另一个查询?

时间:2014-02-06 12:10:12

标签: php mysql sql

我已经搜索并找到了在查询中进行查询的方法,但我找不到正确的答案。

我要做的是从名为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

3 个答案:

答案 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