如何分离查询结果以与其他查询结果对应

Posted

技术标签:

【中文标题】如何分离查询结果以与其他查询结果对应【英文标题】:How to separate the query result to corespond with other query result 【发布时间】:2021-08-29 13:45:30 【问题描述】:

我一直试图在将鼠标悬停在他们上传的图片上时显示图片上传者的名称,但我会显示来自每张图片的查询的所有名称,或者只显示每张图片的查询结果中的名字。我尝试使用 foreach 来实现,而 for(设置 $rowz[$i] 并增加 $i 变量),我什至尝试创建会显示名称的函数,但我总是以错误或错误输出结束。请记住,我是 php 和 sql 的超级新手。

$sql="SELECT * FROM picture WHERE status=1";
$rs=doQuery($db,$sql);
$row=mysqli_fetch_array($rs);
while($row=mysqli_fetch_array($rs))
    echo"<img class='picture__img' src='$row['url']' >";
    $sql="SELECT name FROM user u, picture p WHERE p.status=1 AND p.user_id=u.user_id";
    $rz=doQuery($db,$sql);
    $rowz=mysqli_fetch_array($rz);
    foreach ($rowz as $k)
            echo"<div class='picture__name'>$rowz[$k]</div>";
        
    

【问题讨论】:

你能提供你收到的和预期的输出吗? 你为什么使用 foreach$rowz[$k] 而不是跳过 foreach 而只是这样做:$rowz['name'] "将鼠标悬停在图片上时显示图片上传者的名称" - 名称和图像是如何连接的?您似乎将所有名称一个接一个地输出,而没有任何标识符告诉您名称属于哪些图像? 在开始 while 循环之前,当您执行 $row=mysqli_fetch_array($rs); 时,您还将丢失第一个查询的第一个结果 您还可以在循环中的每次迭代中获取所有图像的所有名称。您应该考虑在第一个查询中使用 JOIN 并直接获取图像和名称,而不是在 while 循环内进行查询。 【参考方案1】:

我解决了我遇到的问题。感谢 Magnus,我意识到当我在循环中使用多个 SQL 查询时会出现问题。我使用 INNER JOIN 创建了一个查询来提取我需要的所有数据并打印所需的列。

$sql="SELECT picture.user_id, user.name, picture.url FROM picture INNER JOIN user ON picture.user_id=user.user_id WHERE picture.status=1";
$rs=doQuery($db,$sql);
$row=mysqli_fetch_array($rs);
while($row=mysqli_fetch_array($rs))
    echo"<img class='picture__img' src='$row['url']' >";
    echo"<div class='picture__name'>$row['name']</div>";
    

【讨论】:

以上是关于如何分离查询结果以与其他查询结果对应的主要内容,如果未能解决你的问题,请参考以下文章

如何根据字段值将查询结果转换为其他列

mysql在select中加入一个查询其他表后的结果

mysql 查询结果,先查含有某字段的数据,再查其他字段的数据

PL/SQL查询查询结果翻译成其他值_decode

sqlserver 如何将查询结果导出到excel中

使用 SQL Server 将子查询结果重用于其他计算