Как отображать записи базы данных в представлении без повторения поля?

В моей базе данных у меня есть две таблицы: одна политика (политика_ид, политика, политика_type_id) и другие tipo_politics (policy_type_id, policy_type).
Это таблица политики

politics_id | politics | politics_type_id -------- | -------- | ------------- 1 | Politic 1 | 1 2 | hello world | 2 3 | magic | 1 4 | love |1 

Это таблица tipo_politics

  politics_type_id | politics_type ------------- | -------- 1 | general 2 | life 

Мне нужно, чтобы показать записи таблицы политики с типом политики как заголовка, но заголовок не повторяется. Что-то вроде этого.

 **General** - Politic 1 - magic - love **Life** - hello world 

Я пытаюсь выполнить запрос с группой, но только показывает одну запись с политикой_type_id 1 . Это код представления.

  <?php for ($j = 0; $j < $contador; $j++) { ?> <div class="content-layout"> <p> <span> <?php echo $list_politic[$j]['politics_type']; ?> </span> </p> </div> <div> <ul style="text-indent: 0px;"> <li> <span> <?php echo $list_politic[$j]['politics']; ?> </span> </li> </ul> </div> <?php } // for j ?> 

В этой форме отображаются такие записи:

  **General** - Politic 1 **General** - magic **General** - love **Life** - hello world 

Надеюсь, вы можете мне помочь, и мой вопрос будет хорошим вопросом.

Solutions Collecting From Web of "Как отображать записи базы данных в представлении без повторения поля?"

Похоже, вы хотите, чтобы заголовки отображались только при изменении politics_type . Это потребует сохранения следа его значения на каждой итерации, и поэтому логика может быть построена следующим образом:

 <?php $previous_politics_type = ""; for ($j = 0; $j < $contador; $j++) { if($previous_politics_type != $list_politic[$j]['politics_type']){ // <-- new if condition ?> <div class="content-layout"> <p> <span> <?php echo $list_politic[$j]['politics_type']; ?> </span> </p> </div> <?php } // <-- end if $previous_politics_type = $list_politic[$j]['politics_type']; ?> <div> <ul style="text-indent: 0px;"> <li> <span> <?php echo $list_politic[$j]['politicas']; ?> </span> </li> </ul> </div> <?php } // for j ?> 

Макет <div> s выше может быть или не быть точно так, как вам нужно, но, надеюсь, он должен дать представление о том, как использовать новую переменную $previous_politics_type .

Если вы сделаете такой запрос, то вы получите строку для типа, а также фактическую политику:

 select tp.politics_type_id, tp.politics_type politics_text, null politics_id, 1 row_type from tipo_politics tp union select p.politics_type_id, p.politics politics_text, p.politics_id, 2 row_type from politics p order by politics_type_id, row_type, politics_id; 

Это дает следующие результаты:

 +------------------+---------------+-------------+----------+ | politics_type_id | politics_text | politics_id | row_type | +------------------+---------------+-------------+----------+ | 1 | general | | 1 | | 1 | Politic 1 | 1 | 2 | | 1 | magic | 3 | 2 | | 1 | love | 4 | 2 | | 2 | life | | 1 | | 2 | hello world | 2 | 2 | +------------------+---------------+-------------+----------+ 

Теперь вы можете просмотреть результаты и действовать только в строках заголовка (где row_type = 1 ). Затем в этом цикле выполните еще один цикл и row_type = 2 строки подробностей (где row_type = 2 ).

 <?php for ($j = 0; $j < $contador; $j++) { if($list_politic[$j]['row_type'] == 1){ ?> <div class="content-layout"> <p> <span> <?php echo $list_politic[$j]['politics_text']; ?> </span> </p> </div> <div> <ul style="text-indent: 0px;"> <li> <?php for($i=0; $i < $contador; $i++) { if($list_politic[$i]['row_type'] == 2 && $list_politic[$i]['politics_type_id'] == $list_politic[$j]['politics_type_id']) { ?> <span> <?php echo $list_politic[$j]['politics_text']; ?> </span> <?php } // if ?> <?php } // for i ?> </li> </ul> </div> <?php } // for if ?> <?php } // for j ?>