Codeigniter сложный MySQL Query - PullRequest
0 голосов
/ 13 марта 2019

Я получил две таблицы, из которых я хотел бы запросить, из которых таблица users и таблица user_job

структура таблицы пользователей

таблица user_job

Чего я хочу добиться - это написать MySQL-запрос в CodeIgniter для отображения информации о пользователе из таблицы пользователей, если user_status в таблице пользователей «Активен», и если в таблице user_job нет строки, в которой user_job_status равен «При испытании» или user_job_status равно «Активен»

На простом английском я хочу отобразить информацию о пользователе, если пользователь в данный момент не работает.

Мой текущий код модели Codeigniter:

//get all user that are not currently assigned to a position
function get_idle_user(){
    $this->db->select('*');
    $this->db->from('users');
    $this->db->join('user_job', 'user_job.user_id_fk = users.user_id', 'INNER');
    $this->db->where('users.user_status','Active');
    $this->db->where("(user_job.user_job_status != 'Active' OR user_job.user_job_status != 'On Probation')", NULL, FALSE);
    $this->db->group_by('users.user_id');
    if($query = $this->db->get()){
        return $query;
    }else{
        return false;
    }
}

Проблема с этим кодом в том, что он по-прежнему будет отображать информацию о пользователе, если есть строка, связанная с пользователем, а user_job_status не удовлетворяет условию where, указанному выше.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 14 марта 2019

Я считаю, что это то, что вы после ...

$db->select('user_id_fk,COUNT(*) as `Tally`');
$db->where('user_job_status','On Probabtion');
$db->or_where('user_job_status','Active');
$db->group_by('user_id_fk');
$sub = $db->get_compiled_select('user_job_table');

$db->join("($sub) ujt",'ujt.user_id_fk = users.user_id AND Tally = 0','left');
$db->where('user_status','Active');

// View this query in full
//echo $db->get_compiled_select('users_table');

// Get the data
$data = $db->get('users_table')->result_array();

Примечание:

  1. Вам не нужно выбирать ('*') - он не нужен
  2. Вам не нужно -> from () - его можно использовать в элементе get ()

Я оставил в get_compiled_select, который позволит вам увидеть полный запрос и понять, что он делает. Вы должны закомментировать строку $ data, если вы раскомментировали строку эха.

Что говорит этот запрос, так это получить всех пользователей из таблицы job_table, которые не имеют статуса «Активен» или «На испытательном сроке», и списка идентификаторов пользователей. Таким образом, вы можете получить активных пользователей из users_table и пользователей с подсчетом 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...