如何使用php迭代整个mysql表

时间:2015-11-16 21:32:11

标签: php mysql

我想遍历mysql表的所有记录。这是我的表格的样子

enter image description here

所以我想打印出用户名和他们发布的帖子的主题。我有另一个用户表。这是我的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在我的其他表中查找用户。这里几乎是一个菜鸟。但是我只得到一个输出。 enter image description here

但是应该有2个输出。因为我的帖子表包含2个由2个不同用户制作的帖子。我只把第一篇文章作为输出。有人可以指点我正确的方向。另外,我如何为所有记录迭代SQL表。

2 个答案:

答案 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表中用户标识的列名,但这应该可行。