Php 如何在视图中显示数据库记录而不重复字段?
在我的数据库中,我有两个表,一个是politics(politics\u id,politics,politics\u type\u id),另一个是tipo\u politics(politics\u type\u id,politics\u type)。Php 如何在视图中显示数据库记录而不重复字段?,php,mysql,sql,codeigniter,Php,Mysql,Sql,Codeigniter,在我的数据库中,我有两个表,一个是politics(politics\u id,politics,politics\u type\u id),另一个是tipo\u politics(politics\u type\u id,politics\u type)。 这是表政治 politics_id | politics | politics_type_id -------- | -------- | ------------- 1 | Politic 1 |
这是表政治
politics_id | politics | politics_type_id
-------- | -------- | -------------
1 | Politic 1 | 1
2 | hello world | 2
3 | magic | 1
4 | love |1
politics_type_id | politics_type
------------- | --------
1 | general
2 | life
这是表tipo_politics
politics_id | politics | politics_type_id
-------- | -------- | -------------
1 | Politic 1 | 1
2 | hello world | 2
3 | magic | 1
4 | love |1
politics_type_id | politics_type
------------- | --------
1 | general
2 | life
我需要的是在视图中显示政治表的记录,其中政治类型作为标题,但标题不重复。像这样的
**General**
- Politic 1
- magic
- love
**Life**
- hello world
我尝试使用group by进行查询,但只显示一条政治类型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 ?>
我希望您能帮助我,我的问题是一个好问题。看起来您希望标题仅在
政治类型发生变化时显示。这将需要在每次迭代中跟踪其值,因此可以按如下方式构造逻辑:
<?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
?>
-
上面的
的布局可能完全符合您的需要,也可能不完全符合您的需要,但希望它能够提供如何使用新的$previous\u politics\u 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;
结果如下:
**General**
- Politic 1
**General**
- magic
**General**
- love
**Life**
- hello world
+------------------+---------------+-------------+----------+
| 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 |
+------------------+---------------+-------------+----------+
现在,您可以循环查看结果,并且只对标题行执行操作(其中行\u type=1
)。然后在该循环中,执行另一个循环并选择详细信息行(其中row\u type=2
)
-
你需要一个在政治中循环的内部循环,在类型中循环的外部循环中。当我在显示政治的跨度中放置一个o for循环时,这只会使文本重复,我有一个问题,变量$politics\u type在哪里??我有你的名字吗?或者它是一个错误,并且是$previous_politics_类型变量。如果是这种情况,它的工作,但仍然是相同的标题重复抱歉,谢谢!!!它适用于将$politics\u type更改为$previous\u politics\u type,我在带有注释的模型中有一个where。很抱歉,在该变量的第二次使用中有一个轻微错误,我现在已经更正了。谢谢你指出这一点,我很高兴它对你起了作用。这不是给了每个政治一个全新的
,而不是一个单一的
,每个政治都在中吗?不,这给了我每个政治一个答案,这不是完美的设计,而是我想要的,这只是调整问题。