我是Codeigniter的新手,过去三天我一直在这里,已经走到了尽头。我正在运行以下查询以从表中获取夹具详细信息。
我有两个表团队和fixture,它们有很多关系,导致一个名为team_has _fixture的连接表
以下是我的表格
team
team_id
team_name
team_logo
fixture
fixture_id
fixture_text
fixture_comp
fixture_type
fixture_level
fixture_date
team_has_fixture
team_team_id
team_fixture_id
team_team_id2
这是我的MODEL
的代码示例MODEL
$results = array();
$this->db->select('*');
$this->db->from('team_has_fixture as tf');
$this->db->join('team as t1', 'tf.team_team_id = t1.team_id');
$this->db->join('team as t2', 'tf.team_team_id2 = t2.team_id');
$this->db->join('fixture', 'tf.fixture_fixture_id = fixture.fixture_id');
$query = $this->db->get();
if($query->num_rows() > 0)
{
$results = $query->result();
}
return $results;
我正在尝试为其中的两个团队创建一个徽标,但是当我运行此代码时,只显示一个徽标。
正确检索所有夹具细节,但只检索了一个团队徽标,我需要两个徽标。
我的Model代码中的以下两行检索数据相互覆盖,导致只有第二行工作。
$this->db->join('team as t1', 'tf.team_team_id = t1.team_id');
$this->db->join('team as t2', 'tf.team_team_id2 = t2.team_id');
如果我注释掉第二行,第一行将带回夹具和第一个团队徽标的所有细节。如果我没有注释掉第二行,查询会带回所有灯具细节和第二个团队徽标 - 它似乎覆盖了它上面的一行
我在这里和其他来源搜索了一个解决方案,我真的很喜欢这个,并希望得到任何帮助。
我也不确定如何在我的视图中显示第二个徽标。
在我的视图中显示结果的代码是
查看
<?php
if (is_array($results))
{
if( !empty($results) )
{
foreach($results as $row)
{
echo '<div class="col-sm-12 col-md-12">';
echo '<div class="thumbnail">';
echo '<tr>';
echo '<h4>';
echo '<td>'.$row->fixture_type.'</td>'."</br></br>";
echo '<td>'.'<img src="'."$row->team_logo".'"> '.$row->fixture_text.' <img src="'."$row->team_logo".'"> '.'</td>'."</br></br>";
echo '<td>'.$row->fixture_level.'</td>'."</br></br>";
echo '<td>'.$row->fixture_comp.'</td>'."</br>";
echo '</h4>';
echo '<td>'.$row->fixture_date.'</td>'."</br></br>";
echo '</tr>';
echo '</div>';
echo '</div>';
}
}
使用echo $ this-&gt; db-&gt; last_query();显示我的上一个查询我得到以下
SELECT * FROM (`team_has_fixture` as tf) JOIN `team` as t1 ON `t1`.`team_id` = `tf`.`team_team_id` JOIN `fixture` ON `tf`.`fixture_fixture_id` = `fixture`.`fixture_id`
使用var_dump($ query-&gt; result());要显示我的查询结果,我得到以下
[0]=> object(stdClass)#22 (15)
{
["team_team_id"]=> string(1) "5"
["fixture_fixture_id"]=> string(2) "62"
["team_team_id2"]=> string(2) "15"
["team_id"]=> string(2) "15"
["team_name"]=> string(8) "Kilkenny"
["team_logo"]=> string(25) "../../crests/kilkenny.png"
["fixture_id"]=> string(2) "62"
["fixture_text"]=> string(16) "Clare V Kilkenny"
["fixture_type"]=> string(7) "Hurling"
["fixture_comp"]=> string(36) "Allianz Hurling League 2014 Roinn 1A"
["fixture_round"]=> string(7) "Round 1"
["fixture_level"]=> string(8) "Roinn 1A"
["fixture_time"]=> string(3) "2pm"
["fixture_date"]=> string(26) "Sunday February 16th, 2014"
["fixture_venue_id"]=> string(1) "5"
}
正如你所看到的,我得到了一个团队徽标而不是另一个。这是我试图解决的问题。非常感谢任何帮助。
答案 0 :(得分:0)
您正在加入team
表两次,这意味着您的select具有相同的列名,这就是为什么一列会覆盖其他列值,因为它们是同一个名称,因此您应该更改所有t2
具有新列名称的别名。参见示例
$this->db->select('tf.*, t1.*, t2.team_id as team_id_2, t2.COL_NAME as COL_NAME_2,......');
所以你将获得t2表的所有不同索引