В моей базе данных у меня есть две таблицы: одна политика (политика_ид, политика, политика_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
Надеюсь, вы можете мне помочь, и мой вопрос будет хорошим вопросом.
Похоже, вы хотите, чтобы заголовки отображались только при изменении 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 ?>