У меня есть три таблицы, пользователи, профили и запросы. Только пользователи, которые создали запросы, будут иметь строку в таблице запросов. Но мне все равно нужно вернуть всех пользователей и отобразить общее количество запросов для каждого пользователя. Я разработал нижеприведенный запрос, который возвращает только тех пользователей, у которых есть запись в таблице запросов, хотя мне нужны все пользователи и для нее возвращать 0 для запросов пользователей, если соответствующая строка не найдена.Как вернуть все строки, даже если они не имеют строк в объединенной таблице
public function getAllUsers()
{
$select = $this->userRepository->select();
$select->setIntegrityCheck(false)
->from('users', array('id', 'username', 'date_created', 'active', 'last_login', 'role'))
->join('profiles', 'users.id = profiles.user_id', array('profile_id' => 'id', 'first_name', 'last_name', 'email', 'avatar', 'on_mailing_list'))
->join('recommendation_requests', 'users.id = recommendation_requests.user_id', array('requests' => 'count(*)'))
->order('users.date_created ASC');
return $this->userRepository->getAdapter()->fetchAll($select);
}
Что мне нужно изменить так, что она возвращает всех пользователей, даже если они не имеют каких-либо запросов и возвращает 0 для столбца запросов, а не общее количество запросов. Я пробовал joinLeft, joinRight, joinInner .... Я не парень SQL, поэтому я немного в тупике.
Используйте 'OUTER JOIN', например. 'LEFT JOIN'. См. Http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – peterm
Спасибо, что сработало, но оно возвращает 1 для пользователей, у которых нет запросов, вместо этого of 0. Любые идеи? –