Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从联接中删除重复项_Php_Mysql_Codeigniter - Fatal编程技术网

Php 从联接中删除重复项

Php 从联接中删除重复项,php,mysql,codeigniter,Php,Mysql,Codeigniter,我遇到了一个原则上有点简单的问题,所以我可能没有正确的方法来解决这个问题。我基本上是在一个页面上列出事件,这些事件有各自的评论。我加入到两个表中,希望运行foreach循环,以获得所有事件及其评论。不幸的是,如果一个事件有多个注释,它会因为我怀疑的加入而重新打印原始事件。有什么更好的方法可以实现我想要实现的目标 在我的模型中: function get_events() { $this->db->select('*'); $this->db->from('

我遇到了一个原则上有点简单的问题,所以我可能没有正确的方法来解决这个问题。我基本上是在一个页面上列出事件,这些事件有各自的评论。我加入到两个表中,希望运行foreach循环,以获得所有事件及其评论。不幸的是,如果一个事件有多个注释,它会因为我怀疑的加入而重新打印原始事件。有什么更好的方法可以实现我想要实现的目标

在我的模型中:

function get_events()
{
    $this->db->select('*');
    $this->db->from('events');
    $this->db->join('comments', 'comments.event_id = events.id', 'left');
    $query = $this->db->get();

    if ($query->num_rows() > 0)
    {
        return $query->result();
    }
}
并且认为:

<?php foreach($events as $row): ?>
    <div class="event">
        <?= $row->event; ?>
        <?php if($row->comment == null): ?><br>
            <i>No comments.</i>
        <?php else: ?>
            <div class="comment">
                <?= $row->comment; ?>
            </div>
        <?php endif; ?>
    </div>
<?php endforeach; ?>
在db中,我基本上有3个事件,一个有2条注释,一个只有1条,一个没有注释。第一个事件打印两次,每个事件都有不同的注释,第二个事件可以打印自己的注释,第三个事件可以完美地打印,因为没有任何注释与之关联

希望这一切都有意义


MT

您可以检查您是否已经回复了事件:

<?php
$lastEvent = null;
foreach($events as $row) {
    if($row->event != $lastEvent) {
        echo '<div class="event">' . $row->event;
    }
    if($row->comment == null) {
        echo '<br><i>No comments.</i>';
    } else {
        echo '<div class="comment">' . $row->comment . '</div>';
    }
    if($row->event != $lastEvent) {
        echo '</div>';
    }

    $lastEvent = $row->event;
}

您可以检查您是否已经响应了事件:

<?php
$lastEvent = null;
foreach($events as $row) {
    if($row->event != $lastEvent) {
        echo '<div class="event">' . $row->event;
    }
    if($row->comment == null) {
        echo '<br><i>No comments.</i>';
    } else {
        echo '<div class="comment">' . $row->comment . '</div>';
    }
    if($row->event != $lastEvent) {
        echo '</div>';
    }

    $lastEvent = $row->event;
}

请看mysql文档中的内容^^这并不能解决问题。他在每一行中都有事件,并且行是唯一的,所以distinct不会过滤任何内容^^这并不能解决问题。他在每一行中都有事件,并且行是唯一的,所以distinct不会过滤任何内容。这段代码不是很可读。。。如果您打开一个,它看起来更可读。问题是和之间的结构不容易识别:这段代码不是很可读。。。如果有一个开口,它看起来更可读。问题是和之间的结构不容易识别: