2014-08-12 4 views
-1

Я смущен тем, что на самом деле происходит здесь. Может ли кто-нибудь уточнить? Я довольно новичок в SQL. Я знаю, что есть 4 таблицы (пользователи, отделы, местоположения, юниты).db query SQL-команда

function get_info($user) 
{ 
    return $this->db->query('SELECT u.*, 
          d.id AS deptID, 
          l.id AS locid, 
          t.UnitName AS unitname FROM users AS u 
          JOIN departments AS d ON d.id == u.Department 
          JOIN locations AS l ON l.id == u.Location 
          JOIN units AS t ON t.id == d.Unit 
          WHERE u.ID == '.$this->db->escape($user))->result_array(); 
} 
+0

Не могли бы вы предоставить еще какой-либо контекст (например, какая база данных SQL является таргетингом, где вы нашли код)? –

+0

довольно прямолинейно ... он берет все поля из таблицы пользователя и отправляется в отделы, чтобы получить deptID, местоположения, чтобы получить locID и единицы, чтобы получить имя единицы. Фильтрация по идентификатору пользователя. У вас есть конкретный вопрос? – Twelfth

+0

То, что вас смущает, точно? Ответ на ваш вопрос в его нынешнем виде будет очень простым объяснением того, что делает код, и, вероятно, не расскажет вам ничего, что вы еще не знаете. – Guffa

ответ

0

Иногда это помогает мне понять SQL-запросы, чтобы сгруппировать их по их частям: что, где, как;

Выберите что?

SELECT u.*, d.id AS deptID, l.id AS locid, t.UnitName AS unitname

Выберите откуда ?:

FROM users AS u

Как она должна быть выбрана?

JOIN departments AS d ON d.id == u.Department JOIN locations AS l ON l.id == u.Location JOIN units AS t ON t.id == d.Unit

Любые дополнительные положения о том, как выбрать его:

WHERE u.ID == 1

Псевдонимы для таблиц также запутаться, я написал со ссылкой на то, что ваш запрос действительно говорят:

  1. Выделить все (*) столбцы из псевдонима таблицы u, истинное имя users
  2. Выберите id из таблицы псевдонимов d, настоящее имя departments, и называют его deptID
  3. Выберите идентификатор из таблицы псевдонимов l, настоящее имя locations, и называют его locid
  4. Выберите UnitName из таблицы псевдонимов t, истинное имя units, и назовите его unitname
0

Учитывая идентификатор пользователя в $user, это возвращает идентификатор отдела, что пользователь находится в (из d.id = u.Department), имя устройства, связанное с этим отделом (от t.id = d.Unit), идентификатор местоположения пользователь (от l.id = u.Location) и всю информацию в таблице users для этого пользователя (от u.*).