Codeigniter使用Join或在哪里验证结果行

时间:2018-10-25 16:57:39

标签: php mysql codeigniter query-builder

用户表:

  

User_id(Pk,AI)|名|姓氏

     
     

1 |约翰|母鹿

     

2 |彼得|格里芬

     

3 |唐纳德|鸭

项目表:

  

Item_id(PK,AI)|所有者(FK-user_id)| Item_name

     
     

1 | 1 |鞋子

     

2 | 2 |裤子

     

3 | 3 |衬衫

Item_review表:

  

Item_review_id(PK,AI)|物品(FK-item_id)|审稿人(FK-user_id)|评分|   内容

     
     

1 | 1 | 2 | 4 |很好

使用上面的表格,在将行插入审阅表之前,我需要检查三件事。

  1. 检查审阅者是否不是项目所有者(无法审阅自己的项目或偏向审阅)
  2. 表单验证(如果审阅者在评分和内容中输入了任何内容)
  3. 检查评论是否存在(没有重复的评论,或者每个用户只有一个评论)

那是我的程序,我不确定除第一个以外的其他两个步骤,因为我不确定如何执行此操作。

我可以简单地使用get where查询,例如:

public function check_biased_review($user_id, $item_id){

$this->db->select('*');
$this->db->from('item');
$this->db->where('item_id', $item_id);
$this->db->where('owner', $user_id);
$query = $this->db->get();

if($query->num_rows() > 0){
return TRUE;}
else{
return FALSE;}
}

我实际上是通过编写上面的代码解决了这个问题,我有这样一个误解:如果有很多评论来查找匹配的行,而我首先忘记了where子句,那我将不得不查询很多行而不是在模型函数中使用foreach循环和if语句在数据库中执行此操作。我猜您必须先编码,而不要假设,并且永远不要做检查,否则您可能会像我一样浪费时间。

但是我的第一个解决方案是使用联接查询。 $item_id$user_id从控制器传递到模型。

我将如何加入表以获得相同的结果?

1 个答案:

答案 0 :(得分:0)

我只是尝试在下面为您提供一个联接查询示例。

$this->db->select('*');
$this->db->from('Item_review');
$this->db->join('User','Item_review.user_id = User.User_id');
$this->db->join('Item','Item_review.item_id= Item.Item_id');
$this->db->where('item_id', $item_id);
$this->db->where('owner', $user_id);
$query = $this->db->get();