我有以下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"
答案 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"