mysql join函数没有加入

时间:2016-10-12 11:51:43

标签: mysql codeigniter

这里我有两个表名称房间和student_hostel,如下所示。 房间看起来像这样

    id rm_number  capacity    bed_no               class    hostel  is_vaccant
    40    1         5       1A,1B,1C,1D,1E          27        7     1
    41    2         4       2A,2B,2C,2D             28        7     0
    42    3         3       3A,3B,3C                29        10    1
    43    4         4       4A,4B,4C,4D             30        10    1
    44    5         6       5A,5B,5C,5D,5E,5F       27        7     1
    45    6         7       6A,6B,6C,6D,6E,6F,6G    29        10    1

我的student_hostel表看起来像这样

     id     first_name     stud_id    hostel   class    room    bed     status
    175     siraj         WPGH00175     7      28        41      2A     P
    176     nesru         WPGH00176     7      28        41      2B     P
    177     faizal        WPGH00177     7      28        41      2C     P
    179     mashoor       WPGH00179     7      28        41      2D     G

当我使用我的代码时

public function view_room_status($num,$offset)
{   
        $this->db->select('rooms.*,class.name as class_name,hostel.name as hostel_name,student_hostel.status');
        $this->db->join('class','class.id=rooms.class');
        $this->db->join('hostel','hostel.id=rooms.hostel');

        $this->db->join('student_hostel','rooms.id=student_hostel.room');
        $query=$this->db->get('rooms',$num,$offset)->result();
        return $query;
}

我是这样的

  sl no     room     class          hostel          Bed
   1         2      Periyar2        Periyar     2A 2B 2C 2D
   2         2      Periyar2        Periyar     2A 2B 2C 2D
   3         2      Periyar2        Periyar     2A 2B 2C 2D
   4         2      Periyar2        Periyar     

但我希望得到这样的

    sl no   room    class         hostel             Bed
     1       1     Periyar1     Periyar     1A,1B,1C,1D,1E
     2       2     Periyar2     Periyar     2A,2B,2C,2D
     3       3     Pamba1       Pamba       3A,3B,3C
     4       4     Pamba2       Pamba       4A,4B,4C,4D
     5       5     Periyar1     Periyar     5A,5B,5C,5D,5E,5F
     6       6     Pamba1       Pamba       6A,6B,6C,6D,6E,6F,6G 

这是我的班级表

id  name          daily_rent    mon_rent    
11  reservation     200         3000    
27  periyar1        100         3000    
28  periyar2        100         3000 
29  pamba1          100         3000    
30  pamba2          100         3000    

这是我的宿舍表

id  user_id     name    type    place   address           username  password
7   78         periyar  Girls   tirur   malappuram       periyar    periyarhostel
10  81          pamba   Boys    tirur   malappuram       pamba           pambahostel
在得到这样的东西后,我想要显示所有床位所占据的状态' P'如同一种颜色和所有床位所占据的状态' G'用一种颜色

3 个答案:

答案 0 :(得分:0)

在您的情况下,问题似乎与您的数据有关。查看您的student_hostel.room列:它只保留值41,因此该表中的每一行都将与房间ID 41匹配。作为证据,请注意查询的输出具有空间#2(即ID) 41)在每一个结果中。

现在我无权访问您的所有数据(似乎有class列我无法在任何地方看到,而hostel列有字符串而不是数字)所以我需要更多信息,以确定如何正确地进行连接。

答案 1 :(得分:0)

尝试使用左连接,它将从左表中获取所有列并从右侧

进行匹配

答案 2 :(得分:0)

你有太多的联接来获得你需要的结果"使用您正在使用的数据!

根据您提供的数据,您的表格肯定会加入并完全按照您所说的那样...

所以要获得"你想要的输出"根据您提供的内容,您的SQL需要

SELECT rooms.rm_number,class.name,hostel.username,rooms.bed_no
    FROM rooms
    JOIN class ON class.id=rooms.class
    JOIN hostel ON hostel.id=rooms.hostel

我猜你的SL不是你在桌面视图中产生的东西。

我意识到你正在做一个关于查询的所有查询并在表格视图中对其进行过滤,但在这种情况下,这并不适合你。

当然,这不会让你想要用来为表格中的行着色的房间状态,所以看看SolarBear在上面回答了什么。