SELECT
p.*
FROM
(
SELECT
p.*,
l.serial_no,
cu.`name` customer_name,
bo.nickname business_owner_name,
toa.nickname technical_owner_a_name,
tob.nickname technical_owner_b_name,
ifnull( pc.comment_num, 0 ) comment_num,
ifnull( pl.apply_count, 0 ) apply_count
FROM
crm_project p
LEFT JOIN crm_customer cu ON p.customer_id = cu.id
AND cu.deleted = 0
LEFT JOIN system_users bo ON p.business_owner = bo.id
AND bo.deleted = 0
LEFT JOIN system_users toa ON p.technical_owner_a = toa.id
AND toa.deleted = 0
LEFT JOIN system_users tob ON p.technical_owner_b = tob.id
AND tob.deleted = 0
LEFT JOIN ( SELECT project_id, GROUP_CONCAT( serial_no ) serial_no FROM crm_license_server WHERE deleted = 0 GROUP BY project_id ) l ON p.id = l.project_id
LEFT JOIN ( SELECT c.project_id, count( c.id ) comment_num FROM crm_comment c WHERE c.deleted = 0 GROUP BY c.project_id ) pc ON p.id = pc.project_id
LEFT JOIN (
SELECT
l.project_id,
count( lh.id ) + count(l.serial_no) apply_count
FROM
crm_license_server l
LEFT JOIN crm_license_server_history lh ON l.id = lh.license_id
AND lh.deleted = 0
WHERE
l.deleted = 0
GROUP BY
l.project_id
) pl ON p.id = pl.project_id
WHERE
p.deleted = 0
) p
AND p.customer_id = #{query.customerId}
AND p.name LIKE CONCAT('%',#{query.name},'%')
AND p.code LIKE CONCAT('%',#{query.code },'%')
AND p.contract_code LIKE CONCAT('%',#{query.contractCode},'%')
AND p.business_status = #{query.businessStatus}
AND p.business_owner = #{query.businessOwner}
AND p.customer_owner LIKE CONCAT('%',#{query.customerOwner},'%')
AND p.start_time BETWEEN #{query.startTime[0]} AND #{query.startTime[1]}
AND p.end_time BETWEEN #{query.endTime[0]} AND #{query.endTime[1]}
AND p.create_time BETWEEN #{query.createTime[0]} AND #{query.createTime[1]}
AND p.status = #{query.status}
AND p.env_info LIKE CONCAT('%',#{query.envInfo},'%')
AND p.serial_no LIKE CONCAT('%',#{query.serialNo},'%')
AND (p.technical_owner_a = #{query.technicalOwner}
OR p.technical_owner_b = #{query.technicalOwner}
OR p.technical_owner_c = #{query.technicalOwner})
ORDER BY
${query.sortField} ${query.sortOrder}
ORDER BY
p.create_time DESC