【问题标题】:How to fix this ambiguous?如何解决这个模棱两可的问题?
【发布时间】:2019-09-25 06:36:09
【问题描述】:

我收到一个数据库错误:

错误号:1052 where 子句中的列“标题”不明确 SELECT * FROM insp_people, editors_pick, video_upload WHERE title LIKE '%a%' ESCAPE '!'

这是模型:

public function getSearch($keyword) {

$this->db->select('*');
$this->db->from('insp_people, editors_pick, video_upload');
$this->db->like('title', $keyword);
$query = $this->db->get();
if($query->num_rows() > 0) {
return $query->result();
}  
}

这是控制器:

$this->load->model('search_model');  

$this->load->model('inspiringpeoples_model');  
$this->load->model('editorspick_model');  
$this->load->model('uploadvideos_model');  

$data = $this->inspiringpeoples_model->getPosts();  
$data = $this->editorspick_model->getPosts();  
$data = $this->uploadvideos_model->getPosts();    


$keyword = $this->input->post('search');  
$data['results'] = $this->search_model->getSearch($keyword);  

$data['title'] = "Search Results";  

$this->load->view('partials/header1', $data);  
$this->load->view('search_result', $data);  
$this->load->view('partials/footer');       

我希望从这三个表中显示搜索结果

【问题讨论】:

  • 解释错误信息,mysql说,你指的是哪个title列?是来自insp_people 表吗?或editors_pick 表?还是来自video_upload 表?你需要告诉mysql具体的title
  • 不要使用邪恶的 SELECT *。而是命名(并限定)您实际希望返回的列
  • 要详细说明草莓所说的内容,最好添加您真正想要的实际列。不仅是为了清晰起见,而且您只需选择您真正需要的数据(您真的需要所有列吗?)就可以节省一些内存,而且您消除了覆盖相同的列名,例如。如果这三列有created_at 日期,你只会得到一次,因为它们被转换成带有键的数组,你只能有一个(键是唯一的)。那么你会弄错created_at 值(或误报)
  • 你能告诉我,你在哪个表中有名为title的列。

标签: php mysql sql database codeigniter-3


【解决方案1】:

改一下

$this->db->like('title', $keyword);

$this->db->like('editors_pick.`title`', $keyword); 
or 
$this->db->like('insp_people.`title`', $keyword); 
or 
$this->db->like('video_upload.`title`', $keyword); 

【讨论】:

  • 在中间打勾
  • 当我改成这个时,它给了我空结果
【解决方案2】:

虽然我对PHP一无所知。但我知道该错误是因为您正在使用的多个表中存在 title 列。

我建议如下。

SELECT * 
  FROM insp_people ip, editors_pick ep, video_upload vp
 WHERE XX.title LIKE '%a%' ESCAPE '!'

这里 XX 将是您在查询中为表指定的别名(ip、ep、vp)之一。在您要过滤数据的列上使用该表别名。

希望这能解决您的问题。

【讨论】:

  • 但它给出了一个空结果
  • 您可以先手动在数据库中执行查询,然后调试查询结果。或者,该过滤器没有数据的可能性很小。
  • 数据库中存在数据..idk 为什么它仍然无法正常工作
  • 你能提供样本数据并查询你正在使用的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多