Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Трехтабличный запрос
 
 автор: fxsektor   (22.08.2007 в 09:14)   письмо автору
 
 

Надо выполнить запрос выдирающий организации из базы организации в которые не звонили менеджеры за определенный промежуток времени в формате: менеджер (LOGIN) || Дата последнего контакта (DT_CONTACT) || Название организации (NAME).
4 таблицы участвуют в запросе (перечисляю только необходимые поля):
1.USERS
ID
LOGIN
2.PERSON
ID
ORGANIZATION_ID
3.ORGANIZATION
ID
NAME
4.CONTACT
DT_CONTACT

Только один момент: если было 1 или более звонков, нужно вывести дату последнего звонка, если не было звонков (в таблице отсутсвуют записи за весь период) нужно вывести надпись "Контактов не было"

   
 
 автор: oradev   (22.08.2007 в 10:36)   письмо автору
 
   для: fxsektor   (22.08.2007 в 09:14)
 

Партизанам сложно помочь!

   
 
 автор: fxsektor   (22.08.2007 в 10:51)   письмо автору
 
   для: oradev   (22.08.2007 в 10:36)
 

>Партизанам сложно помочь!

нужна какая-то идополнительная информация?

   
 
 автор: oradev   (22.08.2007 в 11:35)   письмо автору
 
   для: fxsektor   (22.08.2007 в 10:51)
 

-- Надо выполнить запрос выдирающий организации из базы организации в которые не звонили менеджеры за определенный промежуток времени

А где связь между менеджерами и временем звонка ?

   
 
 автор: fxsektor   (22.08.2007 в 13:42)   письмо автору
 
   для: oradev   (22.08.2007 в 11:35)
 

Сори, вот полная раскладка:
1.USERS
ID
EDIT_USERS_ID INTEGER
LOGIN
PASSW
FIO
JOBTITLE
GRANTS
COMMENTS
2.PERSON
ID
ORGANIZATION_ID
USERS_ID
EDIT_USERS_ID
FIO
JOBTITLE
TEL_JOB
TEL_MOBILE
EMAIL
COMMENTS
3.ORGANIZATION
ID
ORGANIZATION_TYPE_ID
USERS_ID
ACTUAL_ADDRESS_ID
LEGAL_ADDRESS_ID
POSTAL_ADDRESS_ID
EDIT_USERS_ID
NAME
TEL
FAX
EMAIL
WEB
HOURS
REQ_INN
REQ_KPP
REQ_RACCOUNT
REQ_OKPO
REQ_OKVED
REQ_BIK
REQ_BANK
REQ_KACCOUNT
ACTIVITY
REMINDER
COMMENTS
4.CONTACT
ID
PERSON_ID
CONTACT_TYPE_ID INTEGER
USERS_ID -------- ID юзера
EDIT_USERS_ID
DT_CONTACT -------- дата&время контакта
COMMENTS

   
 
 автор: oradev   (22.08.2007 в 14:16)   письмо автору
 
   для: fxsektor   (22.08.2007 в 13:42)
 

Очень много излишнего, нужно лишь связи между таблицами и данные которые нужно выбрать. Я так понимаю у вас 3 ключевые таблицы:
1) person - словарь менеджеров
2) organization - словарь организаций
3) contact - таблица отношение между табл 1 и 2,выражающая время звонка менеджера в организацию (отношение N:M)

   
 
 автор: Furst   (22.08.2007 в 14:44)   письмо автору
 
   для: oradev   (22.08.2007 в 14:16)
 

Может как то так?

SELECT users.name, MAX(contact.dt_contact), organisation.name
FROM users
LEFT JOIN contact on contact.users.id=users.id
LEFT JOIN organisation on organisation.users.id=contact.users.id
WHERE contact.dt_contact > NOW() - INTERVAL 3 MONTH
GROUP BY users.id;

   
 
 автор: fxsektor   (22.08.2007 в 15:55)   письмо автору
 
   для: Furst   (22.08.2007 в 14:44)
 

чет скрипт не работает, надо посмотреть MAX() можно ли здесь использовать?

   
 
 автор: Faraon   (22.08.2007 в 16:23)   письмо автору
 
   для: fxsektor   (22.08.2007 в 15:55)
 

А если так

SELECT users.fio, MAX(contact.dt_contact), organisation.name
FROM users
LEFT JOIN contact on contact.users_id=users.id
LEFT JOIN organisation on organisation.users_id=contact.users_id
WHERE contact.dt_contact > NOW() - INTERVAL 3 MONTH
GROUP BY users.id

   
 
 автор: oradev   (22.08.2007 в 17:06)   письмо автору
 
   для: Faraon   (22.08.2007 в 16:23)
 

Ребята (Furst, Faraon), это бесполезно - автор не знает что хочет сам!

   
 
 автор: fxsektor   (22.08.2007 в 17:16)   письмо автору
 
   для: oradev   (22.08.2007 в 17:06)
 

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

   
 
 автор: Furst   (22.08.2007 в 19:16)   письмо автору
 
   для: fxsektor   (22.08.2007 в 17:16)
 

Да, налепил я точек не в тему :-). Но запрос от Faraon должен работать. Чем результат не устаивает?

   
 
 автор: oradev   (22.08.2007 в 22:31)   письмо автору
 
   для: fxsektor   (22.08.2007 в 17:16)
 

Автор привидите какие данные вы хотите получить в результате выборки. Так будет легче и вам и нам.

   
 
 автор: Trianon   (23.08.2007 в 00:52)   письмо автору
 
   для: fxsektor   (22.08.2007 в 17:16)
 

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

и Вы абсолютно правы по всем пунктам. Как минимум по первому и третьему.
Хотя структуру можно было сразу раскрыть так, чтоб все связующие поля были показаны.

   
 
 автор: Trianon   (23.08.2007 в 00:49)   письмо автору
 
   для: fxsektor   (22.08.2007 в 09:14)
 


select 
    coalesce(U1.LOGIN,'Not registered') as USER, 
    coalesce(DTMAX, 'No contacts with ') as DT, 
    O1.NAME
  from ORGANIZATION as O1
  left join
  (select max(C.DT_CONTACT) as DTMAX, O.ID as OID
    from ORGANIZATION as O
      join PERSON as P on O.ID = P.ORGANIZATION_ID
      join CONTACT as C on P.ID = C.PERSON_ID
    where C.DT_CONTACT between '$min' AND '$max'
  )as ODM
    on O1.ID = ODM.OID
  join CONTACT as C1 on ODM.DTMAX = C1.DT_CONTACT
  join PERSON as P1 on C1.PERSON_ID = P1.ID
  left join USERS as U1 on P1.USERS_ID = U1.ID

   
 
 автор: fxsektor   (24.08.2007 в 08:45)   письмо автору
 
   для: Trianon   (23.08.2007 в 00:49)
 

Trianon,
твой скрипт не работает, чтобы выяснить почему ты можешь объяснить каждую строчку, если не трудно конечно.
Пиво с меня

   
 
 автор: oradev   (24.08.2007 в 14:18)   письмо автору
 
   для: fxsektor   (24.08.2007 в 08:45)
 

:)

   
 
 автор: Trianon   (24.08.2007 в 14:40)   письмо автору
 
   для: fxsektor   (24.08.2007 в 08:45)
 

пиво я не пью. Предпочту мартини.

Не работает - не вопрос. Не пользуйтесь :)

PS.
Прикрепите архив с дампом (структурой и фрагментом данных), тогда можно будет потестировать.
PPS. Я понимаю выражение "не работает", когда его сопровождают диагностическим сообщением и/или указывают отличия результата от ожидаемого (вкупе с дампом)

   
 
 автор: fxsektor   (24.08.2007 в 14:58)   письмо автору
 
   для: Trianon   (24.08.2007 в 14:40)
 

ок, спасибо за старания, и за скрипт
дамп не могу выслать по корпоративным соображениям
bye!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования