【问题标题】:Codeigniter database Join not accepting value instead of column name [duplicate]Codeigniter数据库加入不接受值而不是列名[重复]
【发布时间】:2012-10-18 11:52:24
【问题描述】:

可能重复:
Codeigniter ActiveRecord: join backticking

我想在列名的位置给出一个值,但它无法识别它并且它给了我错误。这是我的代码:

$this->db->select('*')->from('users')->where('users.ID',$this->session->userdata('user_id'));
$this->db->join('contact','contact.ID = 1','left');
$result =  $this->db->get()->row_array();

问题在于加入,它不接受值。它给了我这个错误

error:

Unknown column '1' in 'on clause'

我必须使用 1,因为表之间没有关系,并且在联系表中只有一行。

【问题讨论】:

  • 你应该输入相关的表格列而不是像users.id这样的1
  • 连接表只有在它们相关时才有意义。我会对userscontact 进行两个单独的查询。

标签: mysql database codeigniter activerecord join


【解决方案1】:

当您要加入时,您需要在公共字段中加入 自然的 SQL 将是:

select * from users join contact on USERS.COMMON_FIELD = CONTACT.COMMONFIELD where users.id = $this->session->userdata('user_id')

“翻译”到 CI

$this->db->select('*')->from('users'));
$this->db->join('contact','contact.common_field = users=common_field');
$this->db->where('users.ID',$this->session->userdata('user_id'))

您必须将表之间的公共字段放在contact.ID = 1); 的位置,

mysql加入http://dev.mysql.com/doc/refman/5.0/en/join.html

CodeIgniter 加入:http://codeigniter.com/user_guide/database/active_record.html

【讨论】:

  • 感谢 jcho360 的回复,实际上这个查询有效 "SELECT * FROM (users) LEFT JOIN 'contact` ON contact.ID = 1 WHERE users.ID = '7'"
  • 我只需要删除我的 1 周围的那些单引号就可以了。但是直到现在我都做不到。
【解决方案2】:

感谢大家的回复。我找到了一个替代方案,使用这个: $this->db->query("SELECT * FROM (users) LEFT JOIN 'contact' ON contact.ID = ? WHERE users.ID = ?",array(1,$user_id)); ,做这个codeigniter不会给我任何错误。

【讨论】:

    【解决方案3】:

    我前段时间遇到过这个问题,我找到了解决方法,请参阅here

    (所以这个问题是重复的)

    【讨论】:

    • 类似问题不可能只有一种解决方案。
    • 是的,这只是一种解决方法。如果您以动态方式组合查询,则无法使用您的解决方案(原始查询)。这是 ActiveRecord 中的一个错误:github.com/EllisLab/CodeIgniter/issues/590(我的解决方案:我写了一个与 ActiveRecord 类似的库 :))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多