Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Объединение двух таблиц
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Объединение двух таблиц

Страниц (1): [1]
 

1. pro_xaoc - 26 Мая, 2016 - 17:17:28 - перейти к сообщению
Доброго времени суток!
Помогите пожалуйста с запросом, полдня гуглю - решение не могу найти.
В общем, для наглядности есть две таблицы:

Таблица STREETS - названия улиц
CODE (SQL):
скопировать код в буфер обмена
  1. id      name
  2. 4    Московский
  3. 7    Яблочная
  4. 10   Гагарина


Таблица USERS - пользователи с адресами, где цифры в адресах - id с таблицы названии улиц
CODE (SQL):
скопировать код в буфер обмена
  1. id       fio        street_from    street_to
  2. 1      Арсен         4                  10
  3. 2      Коля          7                   4
  4. 3      Петя          4                    7
  5. 4      Степан       10                  7


Суть проблемы: надо сделать запрос с JOINами, чтобы получилась следующая таблица

CODE (SQL):
скопировать код в буфер обмена
  1. id       fio        street_from    street_to   street_from_name          street_to_name
  2. 1      Арсен         4                  10           Московский                Гагарина
  3. 2      Коля          7                   4             Яблочная                  Московский
  4. 3      Петя          4                    7            Московский               Яблочная
  5. 4      Степан       10                  7              Гагарина                  Яблочная


Мой sql-код:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT users.*, streets.name AS street_name
  2.        FROM users
  3.        LEFT JOIN streets
  4.             ON users.street_from = streets.id AND users.street_to = streets.id


Дело в том, что при в моем случае выбирается последняя street_to_name. Копая в разные JOIN-ы (INNER, RIGHT и т.д.) совсем запутался. Помогите пожалуйста
2. Sail - 27 Мая, 2016 - 09:22:42 - перейти к сообщению
pro_xaoc, для такого случая есть возможность неоднократно использовать одну таблицу в запросе для получения данных из разных её строк по разным критериям, применяя псевдоним для именования таблицы:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT users.*, street_from.`name` AS street_from_name, street_to.`name` AS street_to_name
  2.        FROM users
  3.        LEFT JOIN streets street_from
  4.             ON users.street_from = street_from.id
  5.        LEFT JOIN streets street_to
  6.             ON users.street_to = street_to.id
3. pro_xaoc - 27 Мая, 2016 - 09:35:45 - перейти к сообщению
Sail пишет:
pro_xaoc, для такого случая есть возможность неоднократно использовать одну таблицу в запросе для получения данных из разных её строк по разным критериям, применяя псевдоним для именования таблицы:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT users.*, street_from.`name` AS street_from_name, street_to.`name` AS street_to_name
  2.        FROM users
  3.        LEFT JOIN streets street_from
  4.             ON users.street_from = street_from.id
  5.        LEFT JOIN streets street_to
  6.             ON users.street_to = street_to.id

Спасибо! То, что надо. Не знал, что можно неоднократно использовать одну таблицу в JOIN-ах Радость

 

Powered by ExBB FM 1.0 RC1