使用联接或验证结果行的位置的代码点火器



User table:

User_id(像素,人工智能) |First_name |Last_name


1 |约翰 |母鹿

2 |彼得 |格里芬

3 |唐纳德 |鸭

项目表:

Item_id(PK,人工智能) |业主(FK - user_id) |Item_name


1 | 1 |鞋

2 | 2 |裤子

3 | 3 |衬衫

Item_review表:

Item_review_id(PK,人工智能) |项目(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 子句,它将在 db 中执行此操作,而不是在带有 foreach 循环和 if 语句的模型函数中执行此操作。我想你必须首先编码,而不是假设,从不做检查,否则你可能会像我一样浪费时间。

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

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

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

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

相关内容

  • 没有找到相关文章