我想遍历mysql表的所有记录。这是我的表格的样子
所以我想打印出用户名和他们发布的帖子的主题。我有另一个用户表。这是我的PHP代码。
require_once('config.php');
// build SQL query
$sql ="SELECT user_id, subject FROM post";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
foreach ($row as $k => $v) {
if($k == 'user_id'){
$uid = $v;
$sql2 ="SELECT '$db', username FROM users WHERE user_id='$uid'";
$result2 = mysqli_query($conn, $sql2);
$row2 = mysqli_fetch_row($result2);
echo $row2[1]. " posted ";
}
if ($k == 'subject') {
echo "<a href='#'> $v </a>";
}
}
我正在使用user_id在我的其他表中查找用户。这里几乎是一个菜鸟。但是我只得到一个输出。
但是应该有2个输出。因为我的帖子表包含2个由2个不同用户制作的帖子。我只把第一篇文章作为输出。有人可以指点我正确的方向。另外,我如何为所有记录迭代SQL表。
答案 0 :(得分:2)
如果您希望查询返回的结果超过1,则应在while循环中调用mysqli_fetch_assoc
。
此外,您可以使用JOIN
查询返回单个查询中的所有数据:
$sql = "SELECT post.subject, users.username
FROM post JOIN users
ON post.user_id = users.user_id";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_assoc($result)){
echo sprintf("<p>%s posted <a href='#'>%s</a></p>", $row['username'], $row['subject']);
}
答案 1 :(得分:0)
我无法看到&#34; $ db&#34;变量来自,但您似乎在需要定义要检索的列的空间中使用它。
我是否可以建议您在post表上执行连接,而不是在每次迭代时执行MySQL查询。
SELECT
`post`.`user_id` AS `post_user_id`,
`post`.`subject` AS `post_subject`,
`users`.*
FROM
`post`
LEFT JOIN
`users` ON `post`.`user_id`=`users`.`id`
如果用户表中存在id,这将为您提供所有帖子,并加入与帖子关联的用户数据。我刚刚猜到了users表中用户标识的列名,但这应该可行。