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