表:政策
| 身份证|标题|描述|open_flg(定义发布状态)|open_date(定义发布日期)|
| - ------|- ------|- ------|- ------|- ------|
| 1个|策略标题1|描述示例|1个|二○二二年二月二十二日|
| 第二章|策略标题2|描述示例|1个|二○二二年二月二十三日|
表:政策案例
| 身份证|策略ID|标题|内容|打开标志|开放日期|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 1个|1个|范例|范例|1个|二○二二年二月二十二日|
| 第二章|第二章|范例|范例|1个|二○二二年二月二十三日|
| 三个|第二章|范例|范例|1个|二○二二年二月二十三日|
我想创建一个表,其中'policy'是父级,policy_case是子级。policy.id
与policy_case.policy_id
相同,应该如下所示:
| 身份证|标题|描述|案例标题|案例内容|
| - ------|- ------|- ------|- ------|- ------|
| 1个|策略标题1|描述示例|范例|范例|
| 1个|策略标题1|描述示例|范例|范例|
| 第二章|策略标题2|描述示例|范例|范例|
我使用了以下代码:
$this->db->select('policy.id,policy.title,policy.description,case.policy_id,case.id as case_id,case.title as case_title,case.contents as case_contents');
$this->db->from('policy');
$this->db->join('policy_case case', 'case.policy_id = policy.id');
$join = $this->db->get_compiled_select();
$query = $this->db->query($join);
$data['policies'] = $query->result_array();
我遇到的唯一问题是policy.description
和policy.title
也会根据案例的数量得到重复的内容。如果我尝试使用foreach
输出阵列数据,它将创建3个策略标题,而不是2个。
下面是我当前的页面HTML(我还没有找到在policy中循环案例的方法):
<?php foreach ($policies as $key => $val) { ?>
<h2><?php echo $val['title']; ?></h2>
<p><?php echo $val['description']; ?></p>
<h3><?php echo $val['case_title']; ?></h3>
<p><?php echo $val['case_contents']; ?></p>
<?php } ?>
1条答案
按热度按时间gzszwxb41#
您可以重新构造结果,使
cases
成为每个策略中的一个数组,但这是一个不必要的步骤,不会带来任何好处。在对结果集进行迭代时,需要跟踪以前的策略,以便决定是否打印
<h2>
:这取决于按策略排序的结果集,因此同一策略中的所有案例都在一起:
显然,您可以继续使用
result_array()
(只是在->get()
之后添加它),我只是删除了它,因为我发现对象符号更容易阅读。