如何使用join进行查询

时间:2017-01-12 12:58:22

标签: php mysql codeigniter

我有一张桌子,其中有四列

  1. ID
  2. USER_TYPE
  3. USER_ROLE
  4. org_id
  5. 现在,如果user_type为1(即个人),那么user_roleorg_id将为空, 但是如果user_type是2(即组织),那么它将具有org_id(组织的ID)和user_role(他在组织中的角色)。

    组织中有三种角色

    1. admin(只有一个人可能是管理员)。
    2. 财务秘密(可能不止一个)。
    3. 批准者(也可能不止一个)。
    4. 我想要什么 如果每个组织的user_type为2,并且所有用户都有user_type 1,我只想获取一个人(可能是该组织的管理员)。

      我的表

      -------------------------------------
      | tbl_user                           |  
      -------------------------------------
      | id | user_Type | user_role | org_id|
      --------------------------------------
      | 1  | 1         | null      | null  |
      | 2  | 2         | 1         | 1     |
      | 3  | 2         | 2         | 1     |
      | 4  | 2         | 3         | 1     |
      | 5  | 2         | 3         | 1     |
      | 6  | 1         | null      | null  |
      | 7  | 2         | 1         | 2     |
      | 8  | 2         | 2         | 2     |
      | 9  | 2         | 3         | 2     |
      | 10 | 2         | 3         | 2     |
      

      使用查询

      SELECT * FROM YourTable t
      WHERE t.user_type = 1 
         OR t.user_role = 1
      

      预期结果

      -------------------------------------
      | tbl_user                           |  
      -------------------------------------
      | id | user_Type | user_role | org_id|
      --------------------------------------
      | 1  | 1         | null      | null  |
      | 2  | 2         | 1         | 1     |
      | 7  | 2         | 1         | 2     |
      | 6  | 1         | null      | null  |
      

      然后我必须将结果与tbl_user_meta一起加入(其中zipcode = 85225)。

      我的tbl_user_meta如下 -

       -------------------------------------
      | tbl_user_meta                       | 
      --------------------------------------
      | id | uid       | user_name | zipcode|
      --------------------------------------
      | 1  | 1         | abc       | 85225  |
      | 2  | 2         | asd       | 85225  |
      | 3  | 3         | asd       | 85225  |
      | 4  | 4         | sdf       | 345678 |
      | 5  | 5         | fgd       | 23456  |
      | 6  | 6         | rgy       | 23567  |
      | 7  | 7         | hyt       | 12345  |
      | 8  | 8         | ukl       | 12345  |
      | 9  | 9         | tko       | 21334  |
      | 10 | 10        | ert       | 85225  |
      

      我最终想要实现的是这条记录

      -------------------------------------
      | tbl_user_meta                       | 
      --------------------------------------
      | id | uid       | user_name | zipcode|
      --------------------------------------
      | 1  | 1         | abc       | 85225  |
      

      P.S - 我用codeigniter

      这样做

      感谢。

3 个答案:

答案 0 :(得分:0)

我想我有答案:

 $this->db->select('tbl_user.*,tbl_user_meta.*');
 $this->db->from('tbl_user');
 $this->db->where('user_type', 1);
 $this->db->or_where('user_role', 1);
 $this->db->where('tbl_user_meta.zipcode',85225);
 $this->db->join('tbl_user_meta','tbl_user_meta.did=tbl_user.id');

 $query=$this->db->get();

 return $query->result();

答案 1 :(得分:0)

如果它是整数,你可以加入表格,记住从“85225”删除“”。

select * from tbl_user, tbl_user_meta where tbl_user.id = tbl_user_meta.id AND tbl_user_meta.zipcode = "85225";

答案 2 :(得分:0)

select a.id, a.uid, b.username, a.zipcode
from tbl_user_meta a
inner join tbl_user b
where a.uid = b.id ; 

这可以在codeigniter中实现。

public function gettable(){
$query ='select a.id, a.uid, b.username, a.zipcode
    from tbl_user_meta a
    inner join tbl_user b
    on a.uid = b.id 
    where a.zipcode = 85225';

   $query = $this->db->query($query);
   $result = $query->result();
   return $result; 
}