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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Запрос с фильтром

Сообщения:  [1-2] 

 
 автор: Trianon   (27.12.2010 в 09:44)   письмо автору
 
   для: Vitaleks   (27.12.2010 в 01:56)
 

a LEFT JOIN b ON cond
устроен таким, что выбирает все строки из таблицы a, независимо от того, выполняется условие cond или нет. Просто если оно не выполняется поля из таблицы b будут выданы как NULL .
И только потом в ход вступает фильтр по условию WHERE.

Далее. Условие сопоставления строк cond в Вашем запросе увязывает строки заказов со строками исполнителей. Только почему-то заказ X увязывается со всеми возможными исполнителями, за исключением тех, которые в него вовлечены. Смысл проверки поля user_last_act в таких строках - никакой вообще.

В разделе WHERE у Вас написано user_last_act < значение . Это выражение будет истинным лишь тогда, когда user_last_act не NULL, а значит попытка отобрать несвязанные строки провалится.

Чтобы поправить положение, я бы начал с того, что составил бы запрос с правильным условием сопоставления строк.
Затем добавил бы в него условие времени активности.
И только потом отделял бы сопоставленные строки от несопоставленных - уже в разделе WHERE.
Если будете следовать такой схеме - всё получится.

Действуйте.

  Ответить  
 
 автор: Vitaleks   (27.12.2010 в 01:56)   письмо автору
 
 

Доброго времени суток.
Имею две таблицы.
Одна для записи заказов вида (orders)
order_id
order_status
order...

Другая для тех кто выполняет заказы (рабочии) (users)
user_id
user_last_act
user_last_order_id


Не могу организовать запрос такого вида.
Извлечь все заказы, у которых статус равен 1 и не заняты рабочими более как 3 часов.
Пробывал запрос типа, но выдает весь список заказов, а при свободных рабочих - дублирует.
SELECT order_id, order...
FROM orders 
LEFT JOIN users ON user_last_order_id!=order_id
WHERE order_status=1 AND user_last_act<time()-60*60*3


Может у вас имеются какието идеи на этот счет? Заранее спасибо

Суть просто отфлиртовать занятые айди заказов рабочими.

  Ответить  

Сообщения:  [1-2] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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