我是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);
}
你可以通过添加 "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'
好吧,我首先建议为了安全起见,你在连接到数据库的时候使用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';
}