2011-07-26 22 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在foreach加入這個

<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