现在我正在设计一个查询来获取用户名和他们发布的内容
这是表“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上实现这一目标?
答案 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>';
以下是我在本例中使用的一些函数的文档链接: