活动记录查询结果不显示具有表联接的所有字段

时间:2016-05-22 10:32:23

标签: php mysql codeigniter

我有以下sql查询,当从控制台运行时,完全生成我想要的结果

SELECT * 
FROM tbl_fixtures f 
LEFT JOIN tbl_countries h 
ON f.home_team = h.country_id 
LEFT JOIN tbl_countries a 
ON f.away_team = a.country_id;

但是当我从Codeigniter以正常的$this->db->query($sql)->result_array()运行它时,我只获得了团队的最后一列,即我得到的不是h.country_id,而是只有远程团队的国家ID(我假设它)正在取代第一支球队)。这可能是因为f. a.h.会话吗?你能帮忙解决这个问题。

这是一个结果的var_dump,因为有很多数据,但它们是相同的:

[0]=>
  array(8) {
    ["matchid"]=>      string(1) "1"
    ["home_team"]=>    string(1) "1"
    ["away_team"]=>    string(1) "2"
    ["date"]=>         string(19) "2016-06-10 21:00:00"
    ["country_id"]=>   string(1) "2"
    ["country_code"]=> string(2) "RO"
    ["country_name"]=> string(7) "Romania"
    ["group"]=>        string(1) "A"

2 个答案:

答案 0 :(得分:2)

这是一个猜测:

您正在进行选择*,因此,由于您所有的国家/地区位于同一个表格中并且具有相同的列名称,因此当您访问CI时,您将返回主页或远离列。在这种情况下,看起来它已经消失了。这是因为这个值会在php中被覆盖,因为你实际上给同一个关联键数组提供了两次相同的值,因为mysql很友好,可以让你做一个带有碰撞列名的SELECT *,这就是为什么你得到你的导致你的控制台或mysql编辑器。

$dbResult['id_country'] = 1;
$dbResult['id_country'] = 2;

如果您在select子句中明确命名列,则可以在脚本中选择正确的国家/地区。

SELECT *,
h.country_id as home_country_id,
f.country_id as away_country_id
FROM tbl_fixtures f 
LEFT JOIN tbl_countries h 
ON f.home_team = h.country_id 
LEFT JOIN tbl_countries a 
ON f.away_team = a.country_id;

我已经把选择星留在了这里,所以你的脚本的其余部分都可以工作,但你应该找出你需要的一切,因为这样的复杂性会产生。

关于select *的补充阅读: Why is SELECT * considered harmful?

答案 1 :(得分:0)

我有同样的问题。我的答案就像Paul Stanley一样,只是区别你使用语法Regular Queries $this->db->query($sql_query) 如果您在codeigniter 3中使用了查询构建器类,那么它将写成如下所示:

$this->db->select('*');
$this->db->select('h.country_id as home_country_id');
$this->db->select('a.country_id as away_country_id');
$this->db->join('tbl_countries as h', 'f.home_team = h.country_id', 'LEFT');
$this->db->join('tbl_countries as a', 'f.away_team = a.country_id', 'LEFT');
$query = $this->db->get('tbl_fixtures as f');
//var $object_reslut is array[object]
$object_result = $query->result();

如果var_dump显示$ object_result:

0]=>
  array(8) {
    ["matchid"]=>      string(1) "1"
    ["home_team"]=>    string(1) "1"
    ["away_team"]=>    string(1) "2"
    ["home_country_id"] => string(1) "1"
    ["away_country_id"] => string(1) "2"
    ["date"]=>         string(19) "2016-06-10 21:00:00"
    ["country_code"]=> string(2) "RO"
    ["country_name"]=> string(7) "Romania"
    ["group"]=>        string(1) "A"