2013-11-10 3 views
1

Мне не удалось разместить последний div, если нужно.Мне не удалось разместить последний div соответствующим образом. While Loop

мой выход из базы данных для запроса:

SELECT a.id, a.name, b.sub_id, b.sub_name FROM cat a, sub_cat b WHERE a.id = b.cat_id 

будет:

| id | name  | sub_id | sub_name     | 
| 1 | moblie | 1 | Phone      | 
| 1 | mobile | 2 | Mobile Phones Accessories | 
| 2 | Lifestyle | 3 | Arts      | 
| 2 | Lifestyle | 4 | Books      | 

я хочу, чтобы сделать эту структуру:

<div id="moblie" class="tab-pane active"> 
<a href="?cat=1&amp;sub_cat=1">Phones</a> 
<a href="?cat=1&amp;sub_cat=2">Mobile Phones Accessories</a> 
</div> 
<div id="Lifestyle " class="tab-pane"> 
<a href="?cat=2&amp;sub_cat=3">Arts</a> 
<a href="?cat=2&amp;sub_cat=4">Books</a> 
</div> 

Мой Оригинал Php Код:

<?php $query = "SELECT a.id, a.name, b.sub_id, b.sub_name FROM cat a, sub_cat b WHERE a.id = b.cat_id"; 
     $result = mysql_query($query); 
     $i=0; 
     $a=1; 
     $b=0; 
     while($row = mysql_fetch_assoc($result)){ 
      $i++; 
      if($i == 1){$set = "active";}else{$set = NULL;} 
      $hre=strtolower(preg_replace("/[^a-zA-Z]+/", "", $row['name'])); 
      while($a == $row['id']){ $a++;?> 
      <div id="<?=$hre?>" class="tab-pane <?=$set?>"> 
      <?php }?> 
      <a href="?cat=<?=$row['id']?>&sub_cat=<?=$row['sub_id']?>"><?=$row['sub_name']?></a> 
      <?php while($b == $row['id']){ $b++;?></div> 
      <?php } 
     }?> 

Выход я получаю:

<div id="mobilephones" class="tab-pane active"> 
    <a href="?cat=1&amp;sub_cat=1">Mobile Phones</a> 
    <a href="?cat=1&amp;sub_cat=2">Mobile Phones Accessories</a> 
<div id="homelifestyle" class="tab-pane "> 
    <a href="?cat=2&amp;sub_cat=3">Art - Collectibles - Hobbies</a> 
    <a href="?cat=2&amp;sub_cat=4">Books - Magazines</a> 
    </div></div> 

Моя идея: , как это было в прошлом, а цикл, как это можно понять наступающий значение для печати DIV.

Я пробовал по-разному не найти решение. Пожалуйста, помогите мне.

Примечание: Я знаю, как сделать это с помощью цикла quires.but. Я хочу сделать это с помощью одного запроса mysql.

ответ

0

Важно

Избегайте использования mysql_* функций! Они устарели.

Для вашего решения, вы можете просто использовать этот путь:

<?php 
    $result = mysql_query($query); 
    $flag = 0; 
    while (false !== ($data = mysql_fetch_array($result))) 
    { 
     if ($data["id"] != $flag) 
     { 
      if ($data["id"] != 1) echo "</div>\n"; 
      echo '<div id="' . $data["name"] . '" class="tab-pane', ($data["id"] == 1) ? ' active' : '', '">', "\n"; 
     } 
     echo '<a href="?cat=' . $data["id"] . '&amp;sub_cat=' . $data["sub_id"] . '">' . $data["sub_name"] . '</a>', "\n"; 
     $flag = $data["id"]; 
    } 
?></div> 

Выход

<div id="mobile" class="tab-pane active"> 
    <a href="?cat=1&amp;sub_cat=1">Phone</a> 
    <a href="?cat=1&amp;sub_cat=2">Mobile Phones Accessories</a> 
</div> 
<div id="Lifestyle" class="tab-pane"> 
    <a href="?cat=2&amp;sub_cat=3">Arts</a> 
    <a href="?cat=2&amp;sub_cat=4">Books</a> 
</div> 

Это, вероятно, следует сделать трюк. Дайте мне знать результаты в комментариях.

+0

На самом деле у меня было n количество строк с n числом id. –

+0

Это не сработало для вас? Вы попробовали это? –

+0

Я внес изменения для strtolower (preg_replace ("/ [^ a-zA-Z] + /", "", $ data ['name'])); из-за некоторого javascript. Ваш код работает отлично ..! –

0

Что делать, если вы перебирать полные результаты «группировка» по названию категории

$awesomearray=array(); 
while($row = mysql_fetch_assoc($result)){ 
    $awesomearray[$row['name'][]=$row; 
} 

, а затем перебрать сгруппированных массива

foreach($awesomearray as $category=>$data) { 
    echo '<div id="'.$category.'" class="tab-pane">  '; 
     foreach($data as $subcategory) { 
      echo '<a href="?cat='.$subcategory['id'].'&amp;sub_cat='.$subcategory['sub_id'].'">'.$subcategory['sub_name'].'</a>'; 
     } 
    echo '</div>  '; 
} 

это не дело с «активным классом ', но я считаю, что вы можете разобраться.

PD: Если вы использовали php-pdo_mysql вместо php-mysql, вы могли бы пропустить первую часть, используя fetchAll и PDO :: FETCH_GROUP. Дай этому шанс.

+0

Необходимо изменить код $ awesomearray [$ row ['name'] [] = $ row; to $ awesomearray [$ row ['name']] [] = $ row; . Причинение ошибки в скрипте. –

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