本帖最后由 luojianfeng 于 2011-01-13 15:32:39 编辑

解决方案 »

  1.   

    表結構改一下。
    所有的審批都是同一條紀錄 
    部门主管_app  部门经理_app   人事负责人_app然後經理審批只要判斷 部门主管_app 是否 = 1
    同樣人事负责人 審批只要判斷 人事负责人_app是否 =1
    select * from table where 部门主管_app=1
      

  2.   


    select * from table where 下級審批=1 and  當前審批 = 0
      

  3.   

    这样改的结果是假如审批人多的话,不是要写很多判断?比如部门主管要判断:   
    if (登陆ID是部门主管 and charge=1)   部门经理要判断:   
    if (登陆ID是部门经理 and (charge=2 or charge=0) and manager=1)   总经理要判断:   
    if (登陆ID是总经理 and (charge=2 or charge=0) and (manager=2 or manager=0))   人事负责人要判断:   
    if (登陆ID是人事负责 and (charge=2 or charge=0) and (manager=2 or manager=0) and (generalManager=2 or generalManager=0))  这样判断不是要写死人啊?
      

  4.   

    select * from table where 下級審批=1 and 當前審批 = 0 and 部門ID = 當權人部門 
    或者在加上  and user = 當前登錄人這樣查出來的數據就是在這個部門裏面能夠操作的數據。。
    代碼裏面根本不用寫什麽 if else...
      

  5.   


    positionID为3的表示为部门主管,positionID为2的表示为部门经理,4为总经理,positionID为6的表示人事负责人请假单根据天数来跑流程:
    比如2天内的跑 3,6
    2天到5天的跑 3,2,6
    5天以上的跑  3,2,4,6懂吗?
      

  6.   

    我认为只要找到当前数据的前一条数据审批了,就表示这条该自己审批了,因为前面一条如果审批了,就代表前面的前面的一条也审批,依次类推,所以现在的问题是如何找到当前数据的前一条数据审批过?SELECT leaveID
      FROM leaveApprove
      WHERE (leaveID IN
      (SELECT leaveID
      FROM leaveApprove
      WHERE positionID = 6 AND deptID = 7 AND approve = 0)) AND  
      (approve = 1)只能在这个基础上改
      

  7.   

    SELECT *
    FROM leave
    WHERE (id IN
      (SELECT (leaveID)
      FROM leaveApprove
      WHERE (leaveID IN
      (SELECT leaveID
      FROM leaveApprove
      WHERE positionID = 6 AND deptID = 7 AND approve = 0)) AND  
      (approve = 1)))原本2个表一起查询是这样的,所以一定要leaveIDFROM leave
    WHERE (id IN
      (SELECT (leaveID)