Мне нужно найти последнюю строку для каждого идентификатора в моей таблице, где было указано «Да», а затем найти в той же таблице следующий экземпляр этого идентификатора, чтобы убедиться, что запись была «Нет». В настоящее время это прекрасно работает в запросе в сочетании с php foreach, который использует результаты первого запроса в предложении where второго. Набор данных содержит чуть более 3000 строк, и весь процесс ужасно неэффективен, поскольку на его завершение уходит чуть более 4 минут.
Я знаю, что могу сделать это с помощью sql, только если бы у меня был только один критерий Where, но поскольку у меня их два, я, кажется, ударился о стену и ценю любую помощь, которую я могу получить.
Заранее спасибо.
//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 />";
}
} ?>