我想只打印一次标题和所有相关图片id_post
表格图片
id_images | dir_image | post_id
1 image1.jpg 1
2 image2.jpg 1
3 image3.jpg 1
4 image4.jpg 1
5 image5.jpg 2
6 image6.jpg 2
7 image7.jpg 2
8 image8.jpg 2
表格POSTS
id_post | slug | title
1 title_post Title Post
2 title_post_2 Title Post 2
PHP代码:
$slug = $_GET['slug'];
$stmt = $DB_con->prepare("SELECT * FROM posts, images
WHERE posts.id_post = images.post_id
AND slug=:slug");
$stmt->execute(array(":slug"=>$_GET['slug']));
while($row=$stmt->fetch(PDO::FETCH_BOTH))
{
?>
<h1><?php print utf8_encode($row['title']);?></h1>
<?php
}
?>
访问“Title post 2”页面,结果是:
Title post 2
image5.jpg
Title post 2
image6.jpg
Title post 2
image7.jpg
Title post 2
image8.jpg
如何获得结果:
Title post 2
image5.jpg
image6.jpg
image7.jpg
image8.jpg
我如何输入SQL分组“group by”来分组图像:
SELECT * FROM posts, images
WHERE posts.id_post = images.post_id
AND slug=:slug
然后在插入一个带有该组图像的foreach的时候?
while($row=$stmt->fetch(PDO::FETCH_BOTH))
{
?>
<h1><?php print utf8_encode($row['title']);?></h1>
<?php
}
?>
如果不解决我的插入,则需要创建几个ifs
答案 0 :(得分:1)
如果你只想在程序PHP中这样做,你可以这样做:
$runningTitle = '';
while($row=$stmt->fetch(PDO::FETCH_BOTH)) {
if ($row['title'] != $runningTitle) {
$runningTitle = $row['title'];
print "<h1>";
print utf8_encode($row['title']);
print "</h1>";
}
// now render images.
}
但是我建议使用更面向对象的方法来构建html字符串,然后将其作为单个字符串返回,最后回显,而不是在程序上渲染所有内容。在渲染页面之前完成所有程序逻辑通常更整洁,而不是在您仍然要求代码做出决策时进行渲染。
您正在使用PHP的传统形式 - 作为模板语言。从那以后,它已经走了很长的路。
答案 1 :(得分:1)
它有些简单快速,如果你加入&#34;图像很少,而不是很多。
您的小组,使用GROUP BY并获取SEPARATOR与GROUP_CONCAT连接的所有图片
SELECT
posts.*,
COUNT(0) total,
GROUP_CONCAT(dir_image SEPARATOR '|') images
FROM
posts
INNER JOIN images ON (posts.id_post = images.post_id )
WHERE
slug=:slug
GROUP BY
id_post
这是你的循环,创建一个数字爆炸隔离区域上的分离器&#34;图像&#34;并做循环
while ($row = $stmt->fetch(PDO::FETCH_BOTH)) {
$aImages = explode('|', $row['images']);
?>
<h1><?php print utf8_encode($row['title']); ?></h1>
<div>
<ul>
<?php
echo '<li>' . implode('</li><li>', $aImages) . '</li>'
?>
</ul>
</div>
<?php
}
?>
或者
while ($row = $stmt->fetch(PDO::FETCH_BOTH)) {
$aImages = explode('|', $row['images']);
?>
<h1><?php print utf8_encode($row['title']); ?></h1>
<div>
<?php
foreach ($aImages as $sImage) {
?>
<a href="<?php echo $sImage;?>"><?php echo $sImage; ?></a>
<?php
}
?>
</div>
<?php
}
?>