2011-07-26 7 views
0

Я создаю контактное приложение (с CodeIgniter и jQuery Mobile), и я нахожусь в точке, где я пытаюсь вставить разделители списков для каждой группировки имен.Запрос на запрос mysql для контактного приложения

Пример:

A 
Adam Smith 
Alex Smith 

B 
Beth Smith 
Billy Smith 

До сих пор я могу получить имена в алфавитном порядке от БД MySQL: http://dl.dropbox.com/u/19118763/screenshots/before.png

КОДА

<?php 
$query = $this->db->query("SELECT * FROM `CONTACTS` ORDER BY `CONTACTS`.`FIRST` ASC LIMIT 0, 100"); 
foreach($query->result() as $row): 
?> 

<li><a href="contacts/details/<?=$row->ID?>/index.php" data-rel="dialog" data-transition="slidedown"><?=$row->FIRST?> <?=$row->LAST?></a></li> 

<?php endforeach; ?> 

Но, как только я добавить следующий код, чтобы получить первый письмо от каждого имени, я получаю следующий результат: http://dl.dropbox.com/u/19118763/screenshots/after.png

ЖЕ КОД ВЫШЕ execept прибавил в Еогеасп

<li data-role='list-divider'><?php echo substr("$row->FIRST",0,1); ?></li> 

ответ

0

Попробуйте заменить код, связанный с этим:

<?php 
$prevletter = null; 
$query = $this->db->query("SELECT * FROM `CONTACTS` ORDER BY `CONTACTS`.`FIRST` ASC LIMIT 0, 100"); foreach($query->result() as $row): 
$letter = substr($row->FIRST, 0, 1); 
if ($letter != $prevletter): 
$prevletter = $letter; 
?> 
<li data-role='list-divider'><?=$letter?></li> 
<?php endif; ?> 
<li><a href="contacts/details/<?=$row->ID?>/index.php" data-rel="dialog" data-transition="slidedown"><?=$row->FIRST?> <?=$row->LAST?></a></li> 
<?php endforeach; ?> 

Это должно делать то, что вам нужно.

+0

это работает как шарм спасибо BOOM: http://dl.dropbox.com/u/19118763/Screenshots/irvu.png – stursby

0

Вы должны были бы проверить, если «первая буква» уже выход ранее, и выход только письмо, когда оно меняется:

$previous_letter = null; // prime things with an "impossible" letter. 

while(...) { 
    if ($previous_letter != substr($row->FIRST, 0, 1)) { 
     ... ouptut new letter ... 
     $previous_letter = new letter... 
    } 
} 
0

Это потому, что для каждой строки вы столкнетесь вы выводите . первая буква Вы только хотите повторить первую букву, если он отличается от последнего первого письма

псевдокод:.!.

$prev = null 
foreach (rows as row){ 
    $curr = substr(row->first, 0, 1) 
    if ($prev != $curr){ 
     echo list-divider 
     $prev = $curr; 
    } 
} 
+0

да, я понял, почему код делает то, что он делает, просто не знал, как заставить его делать то, что я хотел: P – stursby

Смежные вопросы