为了账号安全,请及时绑定邮箱和手机立即绑定

MYSQL 两个表,在块内显示每个用户

MYSQL 两个表,在块内显示每个用户

PHP
至尊宝的传说 2022-09-03 15:56:45
我有两张桌子mugallery_2019 table                  |  users tabletitle | filename | id | author_id     |  user_name | user_id----------------------------------    |  --------------------test1 |test1.jpg | 1  | 1             |  tester1   | 1test2 |test2.jpg | 2  | 2             |  tester2   | 2 test3 |test3.jpg | 3  | 2             |  tester3   | 3test4 |test4.jpg | 4  | 1             |test5 |test5.jpg | 5  | 1我的目标是从这些表中检索数据,并在一个页面上显示按每个用户分组的图像。在我的知识范围内,我尝试了许多其他方法,但它们不会像我预期的那样工作。这是我用两个查询尝试的第一个。案例1<div class="test"><?php $result = mysqli_query($con, "SELECT user_name FROM mugallery_2019 JOIN users ON mugallery_2019.author_id = users.user_id GROUP BY author_id") or die(mysqli_error($con));    while($row = mysqli_fetch_array($result)): ?>    <div class="user">        <h2><?php echo $row['user_name']; ?></h2>        <?php $result2 = mysqli_query($con, "SELECT id, filename, title FROM mugallery_2019") or die(mysqli_error($con));        while($item = mysqli_fetch_array($result2)): ?>        <div class="thumb">            <a href="display.php?id=<?php echo $item['id']; ?>"><img src="images/thumbs-square/<?php echo $item['filename']; ?>" alt=""></a>        </div>        <?php endwhile; ?>    </div>    <?php endwhile; ?></div>案例 1 结果tester1test1.jpg test2.jpg test3.jpg test4.jpg test5.jpgtester2test1.jpg test2.jpg test3.jpg test4.jpg test5.jpg这是我尝试使用一个查询的另一种方式
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

你可以尝试这样的事情,你按 对结果进行排序,然后在PHP中检查用户ID是否在迭代之间发生了变化。当它更改时,关闭上一个块(如果它已打开)并显示新的标题。user_id


当可以避免查询时,您应该避免在循环中进行查询(此解决方案可以避免)!


<div class="test">

    <?php 

    $prev_user = null;

    $result = mysqli_query($con, "SELECT *

                                    FROM mugallery_2019 AS m

                                    JOIN users AS u

                                        ON m.author_id = u.user_id 

                                    ORDER BY u.user_id") or die(mysqli_error($con));

    if (mysqli_num_rows($result)) {

        while($row = mysqli_fetch_array($result)) {

            $title = $row['title'];

            $image = $row['filename'];

            $id = $row['id'];

            $user_id = $row['user_id'];

            $user_name = $row['user_name'];


            if ($prev_user !== $user_id) {

                if ($prev_user !== null) {

                    echo '</div>';

                }

                $prev_user = $user_id;

                ?>

                <div class="user">

                    <h2><?= $user_name ?></h2>

                    <?php 

            } ?>

            <div class="thumb">

                <a href="display.php?id=<?= $id; ?>"><img src="images/thumbs-square/<?= $image; ?>" alt=""></a>

            </div>

            <?php 

        }

        echo '</div>';

     } ?>

</div>

此外,一些适当的错误处理也不是一个坏主意。如果发生错误,这将向最终用户显示实际的SQL错误,这是不好的。永远不要在实时生产环境中显示错误。


查看完整回答
反对 回复 2022-09-03
?
茅侃侃

TA贡献1842条经验 获得超21个赞

试试这个:


$users = mysqli_query($con, "SELECT * FROM users") or die(mysqli_error($con));


while($user = mysqli_fetch_array($users)){

    $result = mysqli_query($con, "SELECT * FROM mugallery_2019 WHERE author_id = {$user['id']}") or 

 die(mysqli_error($con));


    <h2><?php echo $user['user_name']; ?></h2>


    while($item = mysqli_fetch_array($result)){

        <div class="thumb">

            <a href="display.php?id=<?php echo $item['id']; ?>"><img src="images/thumbs-square/<?php echo $item['filename']; ?>" alt=""></a>

        </div>          

    }


    echo "\n</div>";  


}


查看完整回答
反对 回复 2022-09-03
  • 2 回答
  • 0 关注
  • 66 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信