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

Php 活动记录查询结果不存在´;不显示具有表联接的所有字段,php,mysql,codeigniter,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\u array()运行它时,我

我有下面的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\u array()
运行它时,我只得到了球队的最后一列,也就是说,我没有得到
h.country\u id
,只有客场球队的国家id(我假设它正在取代第一支球队)。这可能是因为
f.
a.
h.
concats?。你能帮我解答这个问题吗

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

[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"
这是一个猜测:

您正在执行select*,因此,由于您的所有国家/地区都在同一个表中,并且都具有相同的列名,因此当它到达CI时,您将返回home或AWEY列。在这种情况下,它看起来像是离开了。这是因为在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 star,所以脚本的其余部分可以工作,但是您应该将目标放在查询出所需的所有内容上,因为会出现类似这样的复杂情况

关于select*的附加阅读: 这是一个猜测:

您正在执行select*,因此,由于您的所有国家/地区都在同一个表中,并且都具有相同的列名,因此当它到达CI时,您将返回home或AWEY列。在这种情况下,它看起来像是离开了。这是因为在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 star,所以脚本的其余部分可以工作,但是您应该将目标放在查询出所需的所有内容上,因为会出现类似这样的复杂情况

关于select*的附加阅读:

我和你有同样的问题。我的回答和Paul Stanley一样,只是你使用语法规则查询的区别
$this->db->query($sql\u 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();
如果变量转储显示$object\u结果:

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"

我和你有同样的问题。我的回答和Paul Stanley一样,只是你使用语法规则查询的区别
$this->db->query($sql\u 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();
如果变量转储显示$object\u结果:

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"

嗯,你能对你的查询结果做一个var_转储,然后发布吗?我想,由于您正在进行左连接,如果没有行,您将不会得到任何结果(只有空值)。没有填充所有内容,当我从终端运行查询时,is将提供所有内容。作为请求发布的Var dump我将尝试执行´$this->db->last_query();在那之后,运行CI提供给您的SQL,只是为了检查SQL正在执行什么。另一个选项是启动result()方法而不是“result\u array()”,要检查.Emmm,您可以对查询结果进行var\u转储并发布它吗?我想,由于您正在进行左连接,如果没有行,您将不会得到任何结果(只有空值)。没有填充所有内容,当我从终端运行查询时,is将提供所有内容。作为请求发布的Var dump我将尝试执行´$this->db->last_query();在那之后,运行CI提供给您的SQL,只是为了检查SQL正在执行什么。另一个选择是启动result()方法而不是'result_array()'),以进行检查。我想你是在写,他会给字段提供别名,可能他会得到所有字段,这是一个很好的猜测,这正是我的问题,我应该知道,不需要时*不应该使用!谢谢你的帮助。固定的!我想你写的是,他会给字段加别名,可能他会得到所有字段,好吧,这是一个很好的猜测,这正是我的问题,我应该知道,当不需要时,不应该使用!谢谢你的帮助。固定的!