如何在视图中显示数据库记录而不重复字段?

时间:2017-04-25 15:33:35

标签: php mysql sql codeigniter

在我的数据库中,我有两个表格政治(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

我希望你能帮助我,我的问题是一个很好的问题。

2 个答案:

答案 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 ?>