不要在循环中重复值

时间:2018-03-25 22:48:32

标签: php mysql

我有以下query

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
    }
    ?>

到目前为止,我才能做到,有人可以帮我吗?

2 个答案:

答案 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必须在组织数据后完成,因为结果的顺序是未知的。