在我的数据库中,我有两个表格政治(politics_id,politics,politics_type_id)和其他tipo_politics(politics_type_id,politics_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
我想用group by进行查询,但只显示一条带有politics_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
我希望你能帮助我,我的问题是一个很好的问题。
答案 0 :(得分:0)
看起来您希望仅在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>
的布局可能完全符合您的要求,但希望它能够提供有关如何使用新$previous_politics_type
变量的建议。
答案 1 :(得分:0)
如果您进行这样的查询,那么您将获得该类型以及实际政治的行:
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
)。
<?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 ?>