Подскажите, как написать запрос, никак в голову не идёт. Есть две таблицы: 1 [data] : id uid - юзер айди mid - менеджер айди data 2 [usr] : id name Нужно выбрать все записи из data и присоеденить туда имена юзера и менеджера, а они оба в одной таблице. Как это сделать, подскажите пожалуйста. Должно быть типа: id uid uname mid mname data
Условия выборки какие? Должны ли в результате выборке присутствовать поля без значения uname/mname? В общем смотри, есть такие варианты: Таблица: [sql] mysql> SELECT * FROM `data`; +----+-----+-----+------+ | id | uid | mid | date | +----+-----+-----+------+ | 1 | 1 | 2 | | | 2 | 3 | 4 | | +----+-----+-----+------+ 2 rows in set (0.01 sec) mysql> SELECT * FROM `usr`; +----+------------------+ | id | name | +----+------------------+ | 1 | Patrick Krolikov | | 2 | David Blane | | 3 | Will Smith | | 4 | Karina Barbi | | 5 | Carl Johnson | +----+------------------+ 5 rows in set (0.00 sec) [/sql] Запросы: 1. Тип получаем отдельно mUsr, uUsr, только при их существовании: [sql] mysql> SELECT `data`.*, `usr`.* FROM `data`, `usr` WHERE `usr`.`id`=`data`.`uid` OR `usr`.`id`=`data`.`mid`; +----+-----+-----+------+----+------------------+ | id | uid | mid | date | id | name | +----+-----+-----+------+----+------------------+ | 1 | 1 | 2 | | 1 | Patrick Krolikov | | 1 | 1 | 2 | | 2 | David Blane | | 2 | 3 | 4 | | 3 | Will Smith | | 2 | 3 | 4 | | 4 | Karina Barbi | +----+-----+-----+------+----+------------------+ 4 rows in set (0.00 sec) [/sql] 2. Получаем строки с mUsr & uUsr, только при их существовании [sql] mysql> SELECT `data`.*, `uusr`.*, `musr`.* FROM `data`, `usr` as `musr`, `usr` as `uusr` WHERE `uusr`.`id`=`data`.`uid` AND `musr`.`id`=`data`.`mid`; +----+-----+-----+------+----+------------------+----+--------------+ | id | uid | mid | date | id | name | id | name | +----+-----+-----+------+----+------------------+----+--------------+ | 1 | 1 | 2 | | 1 | Patrick Krolikov | 2 | David Blane | | 2 | 3 | 4 | | 3 | Will Smith | 4 | Karina Barbi | +----+-----+-----+------+----+------------------+----+--------------+ 2 rows in set (0.00 sec) [/sql] 3. Вариант, когда uUsr || mUsr может не существовать (для этого удалил из usr по 1 записи из группы). Предыдущий запрос вернет пустой результат, поэтому будем делать через join'ы [sql] mysql> SELECT `data`.*, `uusr`.*, `musr`.* FROM `data` LEFT JOIN `usr` as `musr` ON (`musr`.`id`=`data`.`mid`) LEFT JOIN `usr` as `uusr` ON (`uusr`.`id`=`data`.`uid`); +----+-----+-----+------+------+------------+------+-------------+ | id | uid | mid | date | id | name | id | name | +----+-----+-----+------+------+------------+------+-------------+ | 1 | 1 | 2 | | NULL | NULL | 2 | David Blane | | 2 | 3 | 4 | | 3 | Will Smith | NULL | NULL | +----+-----+-----+------+------+------------+------+-------------+ 2 rows in set (0.00 sec) [/sql] Так все... у меня сегодня экзамен по сопромату=)
Kreker, СПАСИБО ОГРОМНОЕ! Я не знал, что можно таблице присвоить два разных виртуальных имени. Класс, очень помогло!