Новичок
Покинул форум
Сообщений всего: 24
Дата рег-ции: Сент. 2014
Помог: 0 раз(а)
|
sqlfiddle работает с переменным успехом, поэтому выложу тут код:
Таблицы и заполнение:
CODE ( SQL):
скопировать код в буфер обмена
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');
Запрос по-первой ссылке (Запрос конечно не верен, не могу придумать как его верно написать. Пока выводит все.):
CODE ( SQL):
скопировать код в буфер обмена
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. По первым тестам работает, но мне не нравится, что пока просрочка не сработает, то выводится поле с пустым значением во втором столбце второй строки, нужно вторую строку вообще не выводить в этом случае, но как? И вообще как запрос составлен, лучше можно?):
CODE ( SQL):
скопировать код в буфер обмена
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 день).
Во втором запросе я почти добился того, что нужно, но хотелось бы довести запрос до ума.
|