在多个表上使用表联接和 LIKE 条件进行 CodeIgniter 查询会出现 1052 模糊字段错误

问题描述 投票:0回答:2

我想根据文章标题进行自动搜索,以显示有关该文章的最新新闻。这些消息可以在一个或几个表中,我们不知道如何使用。这是我的代码:

$search = 'any article title';
$Linkearray = array('title' => $search);
$Linkearray2 = array('text' => $search);
$this->db->or_like($Linkearray);
$this->db->or_like($Linkearray2);
$this->db->from('table1', 'table2');
$query = $this->db->get();

然后我尝试通过下一个代码在页面上显示结果:

foreach ($query->result_array() as $row):
    echo $row['title'];
endforeach;

问题是,它仅显示来自 table1 的搜索结果。 如果我将一行代码重写为:

$this->db->from('table1, table2');

我收到错误 1052,因为我的 LIKE 条件中的字段名称之一在两个表中都存在。

php codeigniter activerecord alias disambiguation
2个回答
2
投票

而且,这是解决方案:

$search = 'some word';
$Linkearray = array('table1.title' => $search,'table2.text' => $search);
$Linkearray2 = array('table2.title' => $search,'table2.text' => $search);
$this->db->or_like($Linkearray);
$this->db->or_like($Linkearray2);
$this->db->from('table1,table2');
$query = $this->db->get();

foreach ($query->result_array() as $row):
echo $row['title'];
endforeach;

这样 - 您将避免 1052 错误,并且脚本将从两个表返回数据。在这种情况下生成的查询是:

SELECT * 
FROM (`table1`, `table2`)
WHERE `table1`.`title` LIKE '%strokes%'
   OR `table2`.`text` LIKE '%strokes%'
   OR `table2`.`title` LIKE '%strokes%'
   OR `table2`.`text` LIKE '%strokes%'

但是,它会返回一些重复的结果...更好的查询,或结果的 php 操作...以获得所需的输出。


-1
投票

你可以使用php函数来组合输出吗? 类似...

array_merge($this->db->from('table1'), $this->db->from(table2))

© www.soinside.com 2019 - 2024. All rights reserved.