如何在MySQL和PHP中用户出现一次的用户显示多个结果?

时间:2014-02-14 09:40:55

标签: php mysql

现在我正在设计一个查询来获取用户名和他们发布的内容

这是表“user”和“post”

中的字段
user: user_name, u_id

post: p_id, u_id, content

我想编写一个像这样显示的查询

user_name        content

Cherry         hi,i am cherry
               hello
Tom            good day today=)

但不是

user_name        content

Cherry         hi,i am cherry
Cherry         hello
Tom            good day today=)

如何以表格形式在PHP上实现这一目标?

4 个答案:

答案 0 :(得分:0)

    select user.user_name, post.content
    from user inner join post on
        user.u_id = post.u_id

获取结果,并在方便时展示。如果user_name出现多次,只需打印一次,然后浏览其所有内容。

答案 1 :(得分:0)

试试这个:

SELECT u . * , (

SELECT GROUP_CONCAT( p.content ) 
FROM post p
WHERE p.u_id = u.u_id
) AS combine
FROM user u
LIMIT 0 , 30

答案 2 :(得分:0)

如果要以类似表格的形式显示它,可以保留一个包含当前用户名或ID的变量。

$currentUser = false;

foreach ($rows as $row) {
  echo '<tr><td>';
  if ($row['user_id'] != $currentUser) {
    //print user
    $currentUser = $row['user_id'];
  }
  echo '</td><td>';
  //print content
  echo '</td></tr>';
}

答案 3 :(得分:0)

GROUP_CONCAT应该对您有所帮助。您可以阅读文档here

您的查询可能如下所示:

select user_name, group_concat(content,"\n") from post group by user_name;

这会将每个用户的所有帖子组合在一起,然后将所有用户行的content字段连接到由换行符分隔的单个字符串中。

您可以看到SQLFiddle with query and results here

(请记住,默认情况下,SQLFiddle以表格式HTML格式打印其结果。选择Run SQL -> Plaintext Output以查看打印出的实际换行符。

已编辑(已添加以下内容)

如果您想使用PHP来处理此问题,您可以执行以下操作:

$query = 'select user_name, group_concat(content,"\n") as contents from post group by user_name;'
$result = mysqli_query($query)

print '<table><tr><td>USER NAME</td><td>CONTENTS</td></tr>';
while ($row = mysqli_fetch_assoc($result)) {
  print '<tr>';
  print '<td>' . $result['user_name'] . '</td>';
  print '<td>' . preg_replace("/\n/", '<br>' . $result['contents']) . '</td>';
  print '</tr>';
}
print '</table>';

以下是我在本例中使用的一些函数的文档链接: