Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL-如何像这样获取?_Php_Mysql_Sql - Fatal编程技术网

PHP MySQL-如何像这样获取?

PHP MySQL-如何像这样获取?,php,mysql,sql,Php,Mysql,Sql,我有一个像这样的数据库,想像这样把图片拿到我的网站上,请看截图 但我不知道,SQL是否可以获取这样的数据?我只知道 $sql = "SELECT id, photographer, image FROM MyTable"; $result = mysqli_query($conn, $sql); while($row = mysqli_fetch_assoc($result)) { echo "<tr>";

我有一个像这样的数据库,想像这样把图片拿到我的网站上,请看截图

但我不知道,SQL是否可以获取这样的数据?我只知道

$sql = "SELECT id, photographer, image FROM MyTable";
$result = mysqli_query($conn, $sql);

while($row = mysqli_fetch_assoc($result))
                {
                    echo "<tr>";
                    echo "<td align='center'>".$i."</td>";
                    echo "<td>".$row['photographer']."</td>";
                    echo "<td><img src='".$row['image']."'></td>";

                    echo "</tr>";

                }
$sql=“从MyTable中选择id、摄影师、图像”;
$result=mysqli\u查询($conn,$sql);
while($row=mysqli\u fetch\u assoc($result))
{
回声“;
回显“$i”;
echo“$行[“摄影师]”;
回声“;
回声“;
}

但这不是我想要的。我该怎么办?还是我的数据库设计错了?

数据库设计并不全是错的。您可以创建另一个表来存储不同的摄影师,并将
MyTable
表的
摄影师
列作为外键

摄影者(tb)

id | photographer_name
---+--------------------
 1 | Photographer A
 2 | Photographer B
 3 | Photographer C
我的表格:

id | photographer_id |   image
---+-----------------+-----------
 1 |        1        |  foo1.jpg
 2 |        1        |  foo2.jpg
 3 |        1        |  foo3.jpg
 4 |        2        |  foo4.jpg
 5 |        2        |  foo5.jpg
 6 |        3        |  foo6.jpg
然后,您可以有两个(?)选项来实现所需的显示:

First是一个
JOIN
查询:

$sql = "SELECT * FROM MyTable a LEFT JOIN photographer_tb b ON a.id = b.photographer_id";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result)){

    if(empty($lastphotographer)){
        echo '<tr>
                  <td align="center">'.$row['photographer_name'].'</td>
                  <td>';
    } else if($lastphotographer != $row['photographer_name']){
        echo '</td></tr>
              <tr>
                  <td>'.$row['photographer_name'].'</td>
                  <td>';
    }

    echo '<img src="'.$row['image'].'">';

    $lastphotographer = $row['photographer_name'];

}

echo (mysqli_num_rows($result) > 0)?'</td></tr>':'';
$sql=“从MyTable a中选择*左加入a.id=b.摄影师\U id上的摄影师\U tb b”;
$result=mysqli\u查询($conn,$sql);
while($row=mysqli\u fetch\u数组($result)){
if(空($lastPhotograph)){
回声'
“.$row[“摄影师姓名]。”
';
}else if($lastPhotograph!=$row['Photograph_name'])){
回声'
“.$row[“摄影师姓名]。”
';
}
回声';
$lastPicture=$row['Picture_name'];
}
echo(mysqli_num_rows($result)>0)?“”:“”;

Second是一个嵌套循环。首先循环所有摄影师,然后在所有链接图像的内部运行另一个循环:

$sql = "SELECT id, photographer_name FROM photographer_tb";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result))
{

    echo '<tr>
              <td align="center">'.$row['photographer_name'].'</td>
              <td>';

    $sql2 = "SELECT images FROM MyTable WHERE photographer_id = '$row[id]'";
    $result2 = mysqli_query($conn, $sql);
    while($row2 = mysqli_fetch_array($result2)){

        echo '<img src="'.$row2['images'].'">';

    }

    echo '</td></tr>';

}
$sql=“从摄影师中选择id、摄影师姓名”;
$result=mysqli\u查询($conn,$sql);
while($row=mysqli\u fetch\u数组($result))
{
回声'
“.$row[“摄影师姓名]。”
';
$sql2=“从MyTable中选择图像,其中摄影师_id='$row[id]'”;
$result2=mysqli\u查询($conn,$sql);
while($row2=mysqli\u fetch\u数组($result2)){
回声';
}
回声';
}

你也可以参考你文章中的评论来寻找其他可行的选择。当您已经在使用
mysqli.*
时,请检查。

为什么要回显
用户名
密码
电子邮件
?这些不是您选择的列。有关如何在输出中保持表中的相关行的信息,请参阅。它显示了如何使用每组的标题行来进行此操作,但相同的总体思路可用于将所有图像放在表的同一行中。@Barmar举个例子。您还可以使用
group\u CONCAT(image)AS images
将每个摄影师的所有图像放在一起。然后在PHP中,您可以使用
explode(',',$row['images'])
将它们转换为一个数组,并将每个图像放入行中。纯文本密码?请不要。