【问题标题】:Ambiguous query [codeigniter]不明确的查询 [codeigniter]
【发布时间】:2013-03-03 19:30:31
【问题描述】:

我有最多三个任意字段(例如“位置、犯罪和 food_rating”)和两个任意表名(例如“食物和犯罪”),其中可能包含这些给定字段。

如果两个表中都有一个属性,我会收到一个“模糊”错误,这是可以理解的。但是,我不太想知道如何生成一个查询来检查每个可能的情况,并在可能的情况下加入。

我在codeigniter中这样做,到目前为止已经写了以下,这会导致错误。我还应该注意,任意字段也可以为空。

$this->db->select($data->att_one . ',' . $data->att_two . ',' . $data->att_three)
->from($data->db_one . ',' . $data->db_two)
->get()
->result_array();

我收到的错误如下:

Column 'location' in field list is ambiguous (因为位置在两个表中)

【问题讨论】:

  • 通过将表名添加到列名来解决歧义。表名.列名

标签: php sql codeigniter activerecord


【解决方案1】:

问题模棱两可,不清楚你想从哪些表中选择什么以及你希望如何填充结果。

如果您想将“食物”和“犯罪”表中的“位置”放在一个结果中,则必须为它们起别名:

$this->db
    ->select('food.location as foodlocation, crimes.location as crimeslocation')
    ->from('food, crimes')
    ->get()
    ->result_array();

根据您对这些结果的处理方式,对每个表使用新查询可能会更容易:

$results = array();
$select = array($data->att_one, $data->att_two, $data->att_three);
$tables = array($data->db_one, $data->db_two);

foreach ($tables as $tableName)
{
    $results[$tableName] = $this->db->select($select)
        ->get($tableName)
        ->result_array();
}

这真的取决于你在做什么,但希望你能明白为什么数据库无法理解你的查询。

【讨论】:

  • 是的,听起来你的手上一团糟。当然我不确定你在做什么,但我强烈怀疑重新考虑你的整体方法可能会有用。
猜你喜欢
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 2017-10-09
  • 2017-01-04
  • 2018-03-11
  • 1970-01-01
相关资源
最近更新 更多