Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2011, 08:57   #21
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Имя алиаса int_pos_0 одинаково в основном запрое и вложенном, попробуйте сделать разные имена. И ваш запрос если и отработает, то вернет или все записи из disp или ни одной.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 22.08.2011 в 08:59.
Аватар вне форума Ответить с цитированием
Старый 22.08.2011, 09:11   #22
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) зачем Вы во внутреннем подселекте используете тот же самый псевдоним (int_pos_0), что и для внешнего? скорее всего, это ни на что не влияет, но зачем добавлять потенциальные проблемы?! Переименуйте его!

2) Мне кажется, что этот запрос И НЕ ДОЛЖЕН работать...
попробуйте такой запрос:
Код:
SELECT int_pos_0.Sys_Time
FROM disp.int_pos int_pos_0
WHERE int_pos_0.Sys_Time not in 
(SELECT int_pos_2.Sys_Time
  FROM disp.int_pos int_pos_2
  WHERE (int_pos_2.Sys_Time>NOW() - INTERVAL 1 HOUR))
если я не ошибаюсь, то этот запрос выберет все записи из таблицы int_pos, где sys_time не попадает в интервал 1 час от текущего времени..

p.s. я на 90% уверен, что Вы решаете не ту задачу, что Вам нужна...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.08.2011, 09:45   #23
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Имя алиаса int_pos_0 одинаково в основном запрое и вложенном, попробуйте сделать разные имена. И ваш запрос если и отработает, то вернет или все записи из disp или ни одной.
Он не работает, потому что запросу Count требуется группировать данные GROUP BY по какому либо ключу, а его нет, вот он и выпендривается.
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) зачем Вы во внутреннем подселекте используете тот же самый псевдоним (int_pos_0), что и для внешнего? скорее всего, это ни на что не влияет, но зачем добавлять потенциальные проблемы?! Переименуйте его!

2) Мне кажется, что этот запрос И НЕ ДОЛЖЕН работать...
попробуйте такой запрос:
Код:
SELECT int_pos_0.Sys_Time
FROM disp.int_pos int_pos_0
WHERE int_pos_0.Sys_Time not in 
(SELECT int_pos_2.Sys_Time
  FROM disp.int_pos int_pos_2
  WHERE (int_pos_2.Sys_Time>NOW() - INTERVAL 1 HOUR))
если я не ошибаюсь, то этот запрос выберет все записи из таблицы int_pos, где sys_time не попадает в интервал 1 час от текущего времени..

p.s. я на 90% уверен, что Вы решаете не ту задачу, что Вам нужна...
Так тоже не пойдет, так как не попадающие данные в интервал 1 час от текущего времени - это все остальные записи, сделанные раньше 1 часа, их в поле может быть бесконечно много.
Коротко: мне надо сделать так, что если записи за последний час отсутствуют, то выполнить определенное действие всё на уровне запросов. И проблема в том, что не понятно, как определить, что записей нет.
Ужас, как я устал от тупизны...
rainbow вне форума Ответить с цитированием
Старый 22.08.2011, 10:10   #24
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
По умолчанию

Сделал так:
Код:
SELECT int_pos_0.Sys_Time,
COUNT(*) FROM disp.int_pos int_pos_0
WHERE (int_pos_0.Sys_Time>NOW() - INTERVAL 1 HOUR)  GROUP BY NULL
Заработало как я хотел:

Но теперь образовалась следующая проблема:

Если записей нет, то Count не считается
PS. Короче всем спасибо за помощь, но разобрался сам, достаточно надо было просто в условие действия1 вставить Count(*)="", где "" как раз означает, что нет записей. Если Count(*)="" то выполнить действие 1.
PSS. Да даже оказалось всё гораздо проще, берется первоначальный запрос:
Код:
SELECT int_pos_0.Sys_Time
FROM disp.int_pos int_pos_0
WHERE (int_pos_0.Sys_Time>NOW() - INTERVAL 1 HOUR)
А в условие вставляется Sys_Time = "", и не надо считать количество записей.
Ужас, как я устал от тупизны...

Последний раз редактировалось rainbow; 22.08.2011 в 10:58.
rainbow вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL запросы Frosts Помощь студентам 2 18.05.2011 11:24
SQL запросы akimov_aleks БД в Delphi 3 21.04.2010 05:42
SQL запросы Best Programmist Microsoft Office Access 8 03.12.2009 16:42
sql запросы wolf950 БД в Delphi 2 28.11.2008 21:26