Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Выбрать просроченные заявки
Alex_r  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 41652
На форуме: 1 год, 4 месяца, 7 дней
Карма:




Всем привет. Есть 2 таблицы - "заявки" и "логи авторизации клиента". Связь между таблицами по полю `client_id`. Посмотрите пример, там я наглядно все выложил - тыц. Запрос конечно не верен, не могу придумать как его верно написать. Пока выводит все.

Как я вижу работу запроса - запрос выбирает все заявки, которые не заблокированы, потом ищет владельца заявки со статусом success и смотрит дату последнего его входа (сортируем по убыванию дабы самая свежая дата была вверху, указываем лимит 1), если дата последнего входа превышает 1 день, то выводим ИД этой заявки для дальнейшей обработки.

Прошу помочь с запросом, перепробовал разные вариации запроса, но все не так. Спасибо.


--------------------
Сервис Депозитка - Ваш депозитный помощник
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Alex_r  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 41652
На форуме: 1 год, 4 месяца, 7 дней
Карма:




Вот написал запрос - тыц, пока указал 1 DAY. По первым тестам работает, но мне не нравится, что пока просрочка не сработает, то выводится поле с пустым значением во втором столбце второй строки, нужно вторую строку вообще не выводить в этом случае, но как? И вообще как запрос составлен, лучше можно?


--------------------
Сервис Депозитка - Ваш депозитный помощник
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Alex_r  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 41652
На форуме: 1 год, 4 месяца, 7 дней
Карма:




sqlfiddle работает с переменным успехом, поэтому выложу тут код:

Таблицы и заполнение:
CREATE TABLE `client_bid` (
`client_bid_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`client_id` int(8) unsigned NOT NULL DEFAULT '0',
`client_bid_blocked` enum('y','n') NOT NULL DEFAULT 'n',
PRIMARY KEY (`client_bid_id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `client_bid` (`client_bid_id`, `client_id`, `client_bid_blocked`) VALUES
(1, 1, 'n'),
(
2, 4, 'y'),
(
3, 4, 'n');

CREATE TABLE `client_login` (
`client_login_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`client_id` int(8) unsigned NOT NULL DEFAULT '0',
`client_login_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`client_login_type` enum('wait','success','failed') NOT NULL DEFAULT 'wait',
PRIMARY KEY (`client_login_id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `client_login` (`client_login_id`, `client_id`, `client_login_date`, `client_login_type`) VALUES
(1, 1, '2015-05-24 16:06:03', 'success'),
(
2, 1, '2015-05-24 18:19:39', 'success'),
(
3, 1, '2015-05-24 18:21:07', 'success'),
(
4, 1, '2015-05-24 18:22:21', 'success'),
(
5, 1, '2015-05-24 18:24:35', 'success'),
(
6, 1, '2015-05-28 16:20:42', 'success'),
(
7, 1, '2015-05-28 16:32:56', 'success'),
(
8, 1, '2015-05-28 16:46:47', 'success'),
(
9, 1, '2015-05-28 17:46:57', 'success'),
(
10, 1, '2015-05-29 18:56:03', 'success'),
(
11, 1, '2015-05-29 19:28:52', 'success'),
(
12, 1, '2015-05-29 19:32:25', 'success'),
(
13, 1, '2015-05-29 19:57:37', 'success'),
(
14, 1, '2015-05-30 12:37:56', 'wait'),
(
15, 1, '2015-05-30 12:38:50', 'failed'),
(
16, 1, '2015-05-30 12:38:58', 'failed'),
(
17, 1, '2015-05-30 13:21:18', 'wait'),
(
18, 1, '2015-05-30 20:12:11', 'success'),
(
19, 1, '2015-06-02 20:49:12', 'success'),
(
20, 1, '2015-06-02 22:52:09', 'success'),
(
21, 1, '2015-06-02 22:54:32', 'success'),
(
22, 1, '2015-06-03 13:45:09', 'success'),
(
23, 1, '2015-06-05 12:47:24', 'success'),
(
24, 1, '2015-06-05 19:50:08', 'success'),
(
25, 1, '2015-07-21 10:09:48', 'success'),
(
26, 1, '2015-07-21 10:29:47', 'wait'),
(
27, 1, '2015-07-21 10:31:03', 'success'),
(
28, 1, '2015-07-21 10:31:21', 'failed'),
(
29, 1, '2015-07-21 14:59:10', 'wait'),
(
30, 1, '2015-07-21 14:59:45', 'success'),
(
31, 1, '2015-07-21 15:00:32', 'failed'),
(
39, 1, '2015-07-21 20:01:37', 'wait'),
(
40, 1, '2015-07-21 20:13:12', 'success'),
(
41, 1, '2015-07-25 14:08:54', 'wait'),
(
42, 1, '2015-07-25 14:20:34', 'wait'),
(
43, 1, '2015-07-25 14:24:18', 'wait'),
(
44, 1, '2015-07-26 18:06:08', 'success'),
(
45, 1, '2015-07-26 19:01:59', 'wait'),
(
46, 1, '2015-07-26 21:47:41', 'wait'),
(
47, 1, '2015-07-26 21:53:27', 'wait'),
(
48, 1, '2015-07-26 22:34:46', 'success'),
(
58, 1, '2015-09-17 21:05:48', 'wait'),
(
59, 2, '2015-09-17 22:32:07', 'wait'),
(
60, 2, '2015-09-17 22:33:46', 'wait'),
(
61, 3, '2015-09-17 22:36:34', 'wait'),
(
62, 1, '2015-09-17 22:43:50', 'wait'),
(
63, 1, '2015-09-17 22:44:31', 'wait'),
(
64, 1, '2015-09-18 01:13:20', 'wait'),
(
65, 1, '2015-09-18 01:14:13', 'wait'),
(
66, 1, '2015-10-16 19:30:13', 'success'),
(
67, 1, '2015-10-22 23:22:31', 'success'),
(
68, 1, '2015-10-23 17:31:42', 'success'),
(
69, 1, '2015-10-23 17:32:09', 'failed'),
(
70, 1, '2015-10-23 17:34:57', 'success'),
(
71, 1, '2015-10-23 17:36:17', 'success'),
(
72, 1, '2015-10-23 17:37:34', 'success'),
(
73, 1, '2015-10-23 17:58:51', 'success'),
(
74, 1, '2015-10-23 18:07:19', 'wait'),
(
75, 1, '2015-10-23 18:07:46', 'failed'),
(
76, 1, '2015-10-23 18:09:05', 'success'),
(
77, 1, '2015-10-23 18:10:40', 'success'),
(
78, 1, '2015-10-23 19:02:15', 'success'),
(
79, 1, '2015-10-23 19:04:27', 'success'),
(
80, 1, '2015-10-23 19:05:48', 'success'),
(
81, 1, '2015-10-23 21:28:25', 'success'),
(
82, 1, '2015-10-23 21:32:41', 'success'),
(
83, 1, '2015-10-23 21:34:19', 'success'),
(
84, 1, '2015-10-23 21:36:24', 'success'),
(
85, 1, '2015-10-23 21:37:30', 'success'),
(
86, 1, '2015-10-23 21:56:07', 'wait'),
(
87, 1, '2015-10-23 22:09:11', 'wait'),
(
88, 1, '2015-10-23 22:11:06', 'success'),
(
89, 1, '2015-10-23 22:17:27', 'success'),
(
90, 1, '2015-10-24 20:04:45', 'success'),
(
91, 1, '2015-10-24 20:16:37', 'success'),
(
92, 1, '2015-10-26 19:14:43', 'success'),
(
93, 1, '2015-10-26 19:32:34', 'success'),
(
94, 4, '2015-10-27 00:15:34', 'success'),
(
95, 4, '2015-10-26 01:25:46', 'failed');

Запрос по-первой ссылке (Запрос конечно не верен, не могу придумать как его верно написать. Пока выводит все.):
SELECT a.`client_bid_id`,
b.`client_login_date`
FROM `client_bid` a
JOIN `client_login` b ON (b.`client_id` = a.`client_id` AND b.`client_login_type` = 'success')
WHERE a.`client_bid_blocked` = 'n'

Запрос по-второй ссылке (Пока указал 1 DAY. По первым тестам работает, но мне не нравится, что пока просрочка не сработает, то выводится поле с пустым значением во втором столбце второй строки, нужно вторую строку вообще не выводить в этом случае, но как? И вообще как запрос составлен, лучше можно?):
SELECT `client_bid`.`client_bid_id` as `id`,
(

SELECT `client_login`.`client_login_date`
FROM `client_login`
WHERE `client_login`.`client_id` = `client_bid`.`client_id`
AND `client_login`.`client_login_type` = 'success'
AND `client_login`.`client_login_date` < NOW() - INTERVAL 1 DAY
ORDER BY `client_login`.`client_login_date` DESC
LIMIT
1
) as `date`
FROM `client_bid`
WHERE `client_bid`.`client_bid_blocked` = 'n'

Описание таблиц с полями и постановка задачи.

client_bid - таблица заявок
-- client_bid_id - ид заявки
-- client_id - ид того кто заявку составил
-- client_bid_blocked - заблокирована или нет заявка

client_login - таблица входов клиента в панель
-- client_login_id - ид входа
-- client_id - ид того кто вошел в панель
-- client_login_date - дата и время входа
-- client_login_type - тип входа (wait - ожидание кода подтверждения входа, success - успешный вход, failed - ошибка при входе)

Нужно - выбрать заявки, которые являются просроченными (потом я их заблокирую). Просроченной заявкой я считаю ту, у которой создатель не входил в панель более 1 дня (цифра будет другая, для теста беру 1 день).

Во втором запросе я почти добился того, что нужно, но хотелось бы довести запрос до ума.

Это сообщение отредактировал Alex_r - 27.10.2015 - 12:46


--------------------
Сервис Депозитка - Ваш депозитный помощник
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Oyeme  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Reality is wrong. Dreams are for real
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1676
Пользователь №: 16955
На форуме: 7 лет, 9 месяцев, 13 дней
Карма: 94




А почему просто не сделать группировку по client_id ?

Тем самым Вы сгрупируите всех клиентов по их номерам только если у них заявка будет превышать 1 день.


	SELECT b.`client_login_date`,a.client_bid_id
FROM `client_bid` a
JOIN `client_login` b ON (b.`client_id` = a.`client_id` AND b.`client_login_type` = 'success')
WHERE a.`client_bid_blocked` = 'n' AND b.client_login_date < NOW() - INTERVAL 1 DAY
GROUP BY a.client_id
ORDER BY b.`client_login_date` DESC


--------------------
Programming: Private lessons via skype £45/h

Частные уроки в Лондоне / удаленно по skype.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Oyeme, неверный результат будет, вот сделал запрос, работает как нужно

SELECT a.`client_bid_id`
FROM `client_bid` a
WHERE a.`client_bid_blocked` = 'n'
AND NOT EXISTS
(
SELECT 1
FROM `client_login` b
WHERE b.`client_id` = a.`client_id`
AND b.`client_login_type` = 'success'
AND b.`client_login_date` > NOW() - INTERVAL 1 DAY
)

    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса