【问题标题】:Codeigniter - Active record Where Join column ambiguousCodeigniter - 活动记录 Where Join 列不明确
【发布时间】:2014-12-26 08:23:34
【问题描述】:

我在 codeigniter 中的活动记录有问题。

这是我的 sql

$this->db->select('*');
    $this->db->from('news as n');
    $this->db->join('user as u', 'n.id_user = u.id_user');
    $this->db->where('like >','10');
    $this->db->limit(10);
    $this->db->offset($offset);
    $query = $this->db->get(); 
    return $query->result_array();

包含“like”列的“news”表和还包含“like”列的“user”表>"

输出如下:

where 子句中的“like”列不明确

SELECT * FROM (`news` as n) 
    JOIN `user` as u ON `n`.`id_user` = `u`.`id` 
    WHERE `like` > '10' LIMIT 5

然后我替换

 $this->db->where('like >','10'); 

 $this->db->where('n.like >','10');

因为我想在新闻表中...但是它不起作用

有什么办法吗?

【问题讨论】:

  • 使用 $this->db->where('n.like >','10');在where子句中
  • 我试过那个代码..没用
  • 等待您将“like”作为列名?
  • 在那种情况下把它放在引号里?并更好地更改该列名
  • 你的意思是新闻作为n吗?如果列我不知道把列名放在哪里...

标签: mysql codeigniter


【解决方案1】:

你需要使用新闻表的别名n 所以n.like

$this->db->select('*');
$this->db->from('news as n');
$this->db->join('user as u', 'n.id_user = u.id_user');
$this->db->where('n.like >','10');
$this->db->limit(10);
$this->db->offset($offset);
$query = $this->db->get(); 
return $query->result_array();

这仍然不起作用,因为like 是 mysql 的保留关键字。您需要将列名更改为其他名称。阅读更多关于mysql保留关键字here

【讨论】:

    【解决方案2】:

    试试这样的

        $this->db->select('*');
        $this->db->from('news as n');
        $this->db->join('user as u', 'n.id_user = u.id_user');
        $this->db->where('n.`like` >','10');
        $this->db->limit(10);
        $this->db->offset($offset);
        $query = $this->db->get();
    

    注意:将您的列名更改为保留关键字以外的名称

    【讨论】:

      【解决方案3】:

      如果您有“like”作为列名,请将列放在撇号(`) like

      $this->db->where('`like` >','10');
      

      但是,使用任何 mysql 保留关键字作为标识符并不是一个好习惯。将列名更改为 else,如果您使用类似列的多个表,请使用表别名。

      $this->db->where('n.`like` >','10');
      

      【讨论】:

      • db活动记录自动添加撇号(`)不需要
      • 所以你认为这是对答案投反对票的原因?
      • 请在否决答案之前正确阅读答案。
      • 我已经看到你的答案,这根本不是解决方案,如果你在$this->db->query() 中使用查询,那么将需要apostrophe 并且 OP 正在使用方法操作查询,因此 CI db 库将自动添加撇号。
      • 伙计,我不想参与争论,我也提到了用户表别名。
      【解决方案4】:

      如果可以避免保留关键字会更好,例如将like列名称更改为likes。

      $this->db->where('n.likes >', 10);
      

      【讨论】:

        猜你喜欢
        • 2012-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 2014-02-22
        • 2011-09-28
        • 2014-10-19
        • 1970-01-01
        相关资源
        最近更新 更多