我有以下query
如您所见,jigsaw
重复两次因为电影有两个类别
但我想回应两个类别,但不是电影的两倍......
<?php
while ($mInfo = $testquery->fetch(PDO::FETCH_ASSOC)) {
?>
<div class="col-xs-6 col-sm-4 col-md-3">
<a href="movie.php?title=<?php echo $mInfo['titleEN']; ?>&m=<?php echo $mInfo['imdbID']; ?>" title="<?php echo $mInfo['titleEN']; ?>" alt="<?php echo $mInfo['titleEN']; ?>" target="_self">
<div class="movie-info">
<img src="assets/images/poster/<?php echo $mInfo['poster']; ?>.jpg" alt="<?php echo $mInfo['titleEN']; ?>">
</div>
<div class="movieinformation">
<div class="movie-title"><?php echo $mInfo['titleEN']; ?></div>
<div class="movie-categories">I WOULD LIKE TO ECHO THE CATEGORIES HERE</div>
</div>
</a>
</div>
<?php
}
?>
到目前为止,我才能做到,有人可以帮我吗?
答案 0 :(得分:0)
这是这类任务的概念。我保留了一般名称并故意遗漏了HTML。
$oldMainId = null; // Initialize to null to start with. This will be needed later.
while ($item = $result->fetch()) { // get your items (movies in your case)
if($oldMain != $item['mainId']) {
// only show title if you haven't yet
echo $item['mainTitle'];
}
// always show the category though
echo $item['sub'];
// re-set the 'old' variable.
$oldMainId = $item['mainId'];
}
答案 1 :(得分:0)
我会用
选项1
$res = $stmt->fetchAll(PDO::FETCH_GROUP);
然后它将在第一列上进行分组,假设是电影ID,或者电影中的一些独特内容,您将在该电影的嵌套数组中获得多行。
然后当你遍历它们时,你可以循环遍历类型的嵌套数组
选项2
另一种选择是使用GROUP_CONCAT
并按电影ID分组
SELECT GROUP_CONCAT(genre) AS genre, ... WHERE ... GROUP BY movieID
但请注意GROUP_CONCAT
确实有最大长度设置,如果数据超过它,它会默默地截断数据。
选项3
您可以自己构建结构(与获取组相同)
$data = [];
while ($mInfo = $testquery->fetch(PDO::FETCH_ASSOC)) {
$key = $mInfo['movieid']
if(!isset($data[$key])) $data[$key] = [];
$data[$key][] = $mInfo;
}
然后通过使用第二个foreach($data as ...)
来完成它并执行你的html必须在组织数据后完成,因为结果的顺序是未知的。