Codeigniter group by array

时间:2013-07-01 11:19:33

标签: mysql arrays codeigniter group-by

HELP!

我正在尝试使用名为“events”的MySQL数据库表为我的CI网站生成“过去事件”页面。有超过100行的数据,有些是重复的,涵盖5个主要国家 - 英格兰,爱尔兰,北爱尔兰,苏格兰和威尔士 - 许多不同的主要城市 - 再次,包括重复的条目 - 和场地。

我已经挣扎了几个星期,现在如何以下列格式查询和返回数据:

<h1>** grouped country **</h1>
<h2> ** grouped city **</h2>
<p>** grouped venue **</p>

如:

<h1>England</h1>
<h2>London</h2>
<p>Tower of London</p>
<h2>Manchester</h2>
<p>Canal Street</p>
<p>Old Trafford</p>
<h1>Ireland</h1>
<h2>Dublin</h2>
<p>St. James' Gate</p>
<h1>Scotland</h1>
<h2>Glasgow</h2>
<p>Buchanan Street</p>
<p>Tron Theatre</p>

我很可能不包括我的模型,视图和控制器的任何代码,因为我到目前为止看起来似乎让人们对我在他们看到它时想要实现的目标感到困惑。而且我愿意接受这样一个事实:我可能会从错误的角度完全攻击这个......我只需要得到以上结果!

感觉好像这应该是一件相当简单的事情,但我需要帮助!

2 个答案:

答案 0 :(得分:0)

您需要按国家/地区,城市和场地对结果进行排序。

循环播放时,您可以执行以下操作

<?php
$lastCountry = null;
$lastCity = null;
$query = $this->db->query("SELECT country, city, venue FROM venues ORDER BY country, city, venue"); // CI query
foreach($list = $query->result_array()) {
    if($list['country'] != $lastCountry) {
        $lastCountry = $list['country'];
        print "<h1>".$list['country']."</h1>";
    }
    if($list['city'] != $lastCity) {
        $lastCity = $list['city'];
        print "<h2>".$list['city']."</h2>";
    }
    print "<p>".$list['venue']."</p>";
}

答案 1 :(得分:0)

添加到Flashin的答案(并忽略了我对弃用方法的使用),程序解决方案可能看起来像这样......

$query = "
SELECT
     *
  FROM venues
 ORDER
    BY country
     , city
     , venue;
";

$lastCountry = null;
$lastCity = null;
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result)) {
    if($row['country'] != $lastCountry) {
        $lastCountry = $row['country'];
        print "<h1>".$row['country']."</h1>";
    }
    if($row['city'] != $lastCity) {
        $lastCity = $row['city'];
        print "<h2>".$row['city']."</h2>";
    }
    print "<p>".$row['venue']."</p>";
}