"예"라고 표시된 테이블의 각 ID에 대한 마지막 행을 찾은 다음 해당 ID의 다음 인스턴스에 대해 동일한 테이블을 검색하여 해당 항목이 "아니오" ". 현재 이것은 두 번째의 where 절에서 첫 번째 쿼리의 결과를 사용하는 PHP foreach와 결합 된 쿼리에서 올바르게 작동합니다. 데이터 세트는 3000 개가 넘는 행에 불과하며 전체 프로세스는 4 분이 채 지나지 않아 비효율적입니다.MySQL의 상관 관계 서브 쿼리 도움말
나는 단지 하나의 기준이있는 경우에만 SQL을 사용하여이 작업을 수행 할 수 있음을 알고 있지만 두 가지 작업을 수행 할 때 벽을 치고 얻을 수있는 도움을 준 것으로 보인다.
미리 감사드립니다.
//Get max dispatchID where Available = 'Yes'
<?php $sql = "SELECT a.memberID, MAX(a.dispatchID) as lastDispatchIDYes
FROM members_availability a
WHERE available = 'Yes'
GROUP BY memberID";
$qry = $this->db->query($sql);
foreach($qry->result() as $row){
$sql2 = "SELECT dispatchID, memberID,
FROM members_dispatch WHERE memberID = '".$row->memberID."' AND dispatchID > '".$row->lastDispatchIDYes."' AND available = 'No'ORDER BY dispatchID ASC LIMIT 1";
$qry2 = $this->db->query($sql2);
if($qry2->num_rows() > 0){
echo $row->memberID." switched availability at ".$row->dispatchID."<br />";
}
} ?>
@Sheldon Pereira가 대답을 조금만 업데이트했습니다. – Zohaib
Zohaib에게 감사의 말을 전합니다. 10 분이 지난 후이 쿼리 시간이 초과되었습니다. –
성능 향상을 위해 열에 인덱스를 추가하는 것이 고려되었습니다. 귀하의 경우 memberId 및 available에 복합 인덱스가 도움이 될 수 있습니다. – Zohaib