Если я понимаю, что вам нужно, я думаю, этот запрос может помочь:
SELECT `a1`.`memberID`, `a1`.`lastDispatchIDYes`, `b`.`dispatchID`, `b`.`available`
FROM (SELECT `a`.`memberID`, MAX(`a`.`dispatchID`) AS `lastDispatchIDYes`
FROM `members_availability` `a` WHERE `a`.`available` = 'Yes'
GROUP BY `a`.`memberID`) `a1`
INNER JOIN `members_availability` `b` ON `b`.`memberID` = `a1`.`memberID` AND `b`.`dispatchID` = `a1`.`lastDispatchIDYes` + 1;
$qry = $this->db->query($sql);
foreach($qry->result() as $row) {
echo $row->memberID . " switched availability at " . $row->lastDispatchIDYes . "<br />";
}
Кроме того, кажется, что может быть проблема с оператором "echo" в примере кода, упомянутом в вопросе. $row->dispatchID
не является допустимым значением в наборе результатов. Я думаю, что это должно быть $row->lastDispatchIDYes
. Нет * * 1006
РЕДАКТИРОВАТЬ 1: обновил запрос так, чтобы запись «Нет» могла быть у любой записи, для которой dispatchID больше, чем dispatchID последней записи с «Да». Исходный запрос выше считывал только те записи «Нет», для которых сразу был следующий dispatchID.
SELECT DISTINCT `a1`.`memberID`, `a1`.`lastDispatchIDYes`
FROM (
SELECT `a`.`memberID`, MAX(`a`.`dispatchID`) AS `lastDispatchIDYes`
FROM `members_availability` `a`
WHERE `a`.`available` = 'Yes'
GROUP BY `a`.`memberID`
) `a1`
INNER JOIN `members_availability` `b`
ON `b`.`memberID` = `a1`.`memberID`
AND `b`.`available` = 'No'
WHERE `b`.`dispatchID` > `a1`.`lastDispatchIDYes`;
Надеюсь, это поможет!