The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Если 2 поля ссылаются на одну таблицу, можно ли одним"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Если 2 поля ссылаются на одну таблицу, можно ли одним"  
Сообщение от rookie email on 28-Авг-08, 16:49 
запросом достать оба? Напр.
СОТРУДНИКИ
  ID
  ФАМИЛИЯ
  и т.д.
------------
ДЕЛА
  ЗАКАЗЧИК -> СОТРУДНИКИ (ID)
  ИСПОЛНИТЕЛЬ -> СОТРУДНИКИ (ID)
  бла бла
---------------
Надо достать две разные фамилии.
Запрос типа "SELECT staff.name, staff.name FROM staff, deals WHERE deals.customer=staff.id AND deals.executor=staff.id" вернёт имя только одного 2 раза.

Обязательно надо делать 2 запроса или есть способ сэкономить?
Может быть по-другому спроектировать структуру таблиц?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Если 2 поля ссылаются на одну таблицу, можно ли одним"  
Сообщение от phpcoder email(??) on 28-Авг-08, 16:55 
>Обязательно надо делать 2 запроса или есть способ сэкономить?

Про JOIN-ы уже читали?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Если 2 поля ссылаются на одну таблицу, можно ли одним"  
Сообщение от rookie email on 28-Авг-08, 17:22 
>>Обязательно надо делать 2 запроса или есть способ сэкономить?
>
>Про JOIN-ы уже читали?

Нет.
Напишите пример запроса для решения данной задачи, если не трудно

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Если 2 поля ссылаются на одну таблицу, можно ли одним"  
Сообщение от angra (ok) on 28-Авг-08, 18:17 
Вот два варианта, сами смотрите какой вам больше подходит. Они отличаются по скорости, надежности и обработке целостности. Обычно нужен второй вариант.
select * from staff;
+------+-------+
| id   | name  |
+------+-------+
|    1 | name1 |
|    2 | name2 |
|    3 | name3 |
+------+-------+

select * from deals;
+----------+----------+
| customer | executor |
+----------+----------+
|        1 |        2 |
|        1 |        3 |
|        2 |        3 |
|        2 |        4 |
+----------+----------+

1. Неявный join:
select s1.name, s2.name from deals as d, staff as s1, staff as s2 where d.customer=s1.id and d.executor=s2.id;
+-------+-------+
| name  | name  |
+-------+-------+
| name1 | name2 |
| name1 | name3 |
| name2 | name3 |
+-------+-------+

2. Явный left join
select s1.name, s2.name from deals as d left join staff as s1 on(d.customer=s1.id) left join staff as s2 on (d.executor=s2.id);
+-------+-------+
| name  | name  |
+-------+-------+
| name1 | name2 |
| name1 | name3 |
| name2 | name3 |
| name2 | NULL  |
+-------+-------+

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Если 2 поля ссылаются на одну таблицу, можно ли одним"  
Сообщение от rookie email on 29-Авг-08, 10:10 
>Вот два варианта, сами смотрите какой вам больше подходит. Они отличаются по

СПАСИБО!
Всё работает
Оба пригодятся

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру