PHPMySQL。当出现一个以上的情况时,限制foreach循环。

问题描述 投票:0回答:1

我是PHP和MySQL的新手,目前正在做一个博客门户。在索引页上,所有最近的文章都会显示标题、作者、日期、文章的前150个字符以及文章的图片。

我在MySQL中有两个表。"post "和 "image",我用foreach循环浏览这两个表,检查一个帖子是否有与之相连的相同postId的图片。我的问题是,如果一个帖子有多个图片,我只想显示一个图片,而不是像现在这样显示所有的图片。我试着做了一个查询,选择一个用户的所有帖子,其中post.id = image.postId,但是没有图片的帖子没有显示。

我很感激任何关于如何使之工作的意见或建议,或者也许是一个完全不同的方法。

在PHPHTML文件中(去掉了循环中添加titlecontent等代码的部分)。

<?php foreach($allPosts as $key => $onePost): ?>

    <?php foreach($allImages as $one => $oneImage): ?>

        <?php if ($oneImage['postId'] === $onePost['id']): ?>
         <?php echo '<img src="../Images/' . $oneImage['filename'] . $secondString; ?>
        <?php endif; ?>

    <?php endforeach;?>
<?php endforeach;?>

在PHPdatabase文件中

function selectAllPosts($conn)
{
    $sql = '
    SELECT p.*
         , u.username 
      FROM post p 
      JOIN users u 
        ON p.userId = u.id 
     ORDER 
        BY created DESC
    ';
    return $allPosts = db_select($conn, $sql);
}


function selectAllImages($conn)
{
    $sql = 'SELECT * FROM image';
    return $postImages = db_select($conn, $sql);
}
php html css mysql blogs
1个回答
0
投票

你可以通过添加 "where "和 "limit "来限制你的图片查询。

类似这样的方法就可以了。

'SELECT * FROM image WHERE image.postId=post.id LIMIT 1'

这种方法假设每张图片都有属性 "postId",也就是帖子的id,其中包含图片的id

注意:使用这个查询,在限制之后得到的是哪个iamge是没有定义的。在实践中,大部分情况下是先保存在db中的图片,但也有可能是不同的。如果你想得到一个特定的图片,你可以在imagetable中添加一些布尔列,例如'hero-image',然后使用这个查询。

'SELECT * FROM image WHERE image.postId=post.id AND image.hero=true LIMIT 1'

0
投票

好吧,我首先建议为了安全起见,你在连接到数据库的时候使用PDO(参见 https:/www.udemy.comcoursephp7-beginners-guide-to-database-pdo.

一个简单的方法是,从数据库中只获取一张图片。

$sql = 'SELECT * FROM image LIMIT 1';

你的图片表是如何结构的?你对显示哪张图片很挑剔吗?如果是这样,当加载一条记录时,你可以有一个字段用于首选图片的位置,而另一个或其他字段用于其余的图片,然后你可以从首选图片字段中选择你的图片,如果有的话。

或者您可以将图像的位置存储在一个数组中,并且只选择数组中的第一个位置(见。https:/www.php.netmanualenfunction.mysql-fetch-array.php)

由于有些记录中没有图像位置,你还需要在显示代码中加入一个过滤器,比如。

if(empty($row['image'])){

}
else{
echo 'Your image display code Here';
}
© www.soinside.com 2019 - 2024. All rights reserved.