用户表:
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 |很好
使用上面的表格,在将行插入审阅表之前,我需要检查三件事。
那是我的程序,我不确定除第一个以外的其他两个步骤,因为我不确定如何执行此操作。
我可以简单地使用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
从控制器传递到模型。
我将如何加入表以获得相同的结果?
答案 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();