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 |伟大
对于上面的表格,在将行插入审阅表之前,我想检查三件事。
- 检查审阅者是否不是项目所有者(无法审阅自己的项目或有偏见的评论)
- 表单验证(如果审阅者在评级和内容中输入了任何内容)
- 检查是否存在评论(没有重复评论或每个用户只有一个评论)
这是我的程序,除了第一个之外,我已经完成了其他两个,因为我不确定并且对如何做到这一点感到困惑。
我可以简单地使用一个 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();