不明确的查询[codeigniter]

时间:2013-03-03 19:30:31

标签: php sql codeigniter activerecord

我有三个任意字段(比如“location,crime and 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 (因为位置在两个表中)

1 个答案:

答案 0 :(得分:3)

问题 是歧义,不清楚您想从哪些表中选择以及如何填充结果。

如果您希望在一个结果中同时显示“食物”和“犯罪”表中的“位置”,则必须为它们添加别名:

$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();
}

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