具有多个表连接的mysql查询,用于从一个表中获取排除匹配条件的数据

时间:2015-07-02 10:44:33

标签: php mysql join

寻找有关mysql查询的一些帮助,以便连接表来提取数据。

我有两个主要表格,

  1. session_schedule - >所有时间表都在这里 输入:

    40,

    41,

    42

  2. session_booking。 - >所有注册都在student_id

    40 - 我

    40 - 我的朋友

    41 - 我的朋友

    42 - none

  3. 当用户从session_schedule注册计划时,会在session_booking表中填充该计划。现在我想获取所有未登记的日程安排。

    请参阅以下代码。

    这应该解决以下情况:

    1. 未被任何人注册的会话。

    2. 其他人注册的会议,但不是我。

    3. 第二个案件失败了,我和其他人一起参加了会议。

      我得到了所有三个条目.. 40,41,42 我不应该得到40

      请参阅以下代码。

       $session_schedule = ORM::factory('sessionschedule')->select(
          'sessionschedule.session_id' ,
          'sessions_booking.session_id' ,
          'sessions_booking.student_id', ) 
      
      
      
       ->join('sessions_booking','LEFT')  
       // this join is to exclude already paid sessions by the user                   
       ->on('sessionschedule.id','=','sessions_booking.session_id') 
       ->where('sessionschedule.session_id', '=', $_POST['id'] )
       ->where_open()
       ->where('sessions_booking.session_id','=',NULL) // for sessions nobody booked                                          
       ->or_where('sessions_booking.student_id','!=',$user->id  )// for sessions booked by others             
       ->where_close()    
      
       ->group_by('sessionschedule.id')->find_all();
      

1 个答案:

答案 0 :(得分:0)

试试这个:

SELECT ses.* 
FROM session_schedule ses 
LEFT JOIN session_booking sb ON ses.id=sb.session_id AND sb.student_id='me' 
WHERE sb.session_id IS NULL;