2013-07-01 6 views
0

ПОМОЩЬ!Группа Codeigniter по массиву

Я пытаюсь создать страницу прошлых событий для моего веб-сайта CI, используя таблицу базы данных MySQL, называемую «события». Существует более 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> 

Я ПРЕДНАМЕРЕННО не включая любой из мой код для модели, представления и контроллера, поскольку то, что я до сих пор, кажется, путает людей относительно того, чего я пытаюсь достичь, когда они это видят. И я открыт тому факту, что я могу атаковать это с неправильного угла вообще ... Мне просто нужно привести вышеизложенное!

Кажется, что это ДОЛЖНО быть довольно простой задачей, но мне НУЖНА ПОМОЩЬ!

+1

Это не просто случай, когда вы заказываете данные по стране, городу, месту проведения и затем перебираете результат? – Strawberry

+0

Вид. НО он затем повторит страну, город и место в цикле КАЖДОГО, в отличие от укладки соответствующей информации под родительской сгруппированной переменной – user2505513

+0

Именно в этом заключается цикл - в то время как что-то есть x сделать одно, а когда оно меняется, то другое ! – Strawberry

ответ

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>"; 
} 
+0

Однако этот ответ не ставит под угрозу целостность файла вида? – user2505513

+0

Что вы подразумеваете под угрозой целостности? Как вы это делаете, это зависит от вас. Вы также можете поместить цикл в представление и поместить запрос в модель, где она должна быть. – Flashin

+0

Я понимаю, что, однако, - файл представления не должен быть как можно более свободным от php? Файлы if, достаточно справедливые, но определяющие переменные и т. Д., Являются файлом представления не неправильным местом для этого? @Flashin ps. Это действительно полезно, спасибо. – user2505513

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>"; 
} 
Смежные вопросы