php - Codeigniter 使用 Join 或 where 来验证一行结果

标签 php mysql codeigniter query-builder

用户表:

User_id(Pk,AI) | First_name | Last_name


1 | John | Doe

2 | Peter | Griffin

3 | Donald | Duck

项目表:

Item_id(PK,AI) | Owner(FK - user_id) | Item_name


1 | 1 | Shoes

2 | 2 | Pants

3 | 3 | Shirt

Item_review 表:

Item_review_id(PK,AI) | Item(FK - item_id) | Reviewer(FK - user_id) | Rating | Content


1 | 1 | 2 | 4 | Great

对于上面的表格,在将一行插入评论表格之前我想检查三件事。

  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 从 Controller 传递到模型。

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

最佳答案

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

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

关于php - Codeigniter 使用 Join 或 where 来验证一行结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52994509/

相关文章:

javascript - 使用 jQuery 在 div onClick() 中隐藏 img 标签

Mysql更新表中不存在记录的情况

php - 我如何在codeigniter中调用动态页面内容

PHP编码风格回归;在开关/外壳中

php - 在 Laravel 项目中为评论创建 Like 系统时遇到问题

php - 如何将 jQuery 自动完成文本框与 DataTables 结合使用

mysql - 使用多个 where Codeigniter 更新多行

python - Flask 使用带有 LIKE % % 的 mysql 查询

java - 制作数据库类

javascript - 现场通知系统