Задавайте вопросы, мы ответим
Вы не зашли.
Существует база данных входа и выхода работников через турникет на предприятии, нужно удалить значения из базы данных по определённому временному промежутку, например - человек пришёл на работу в 7:48 а потом выходил и входил несколько раз до обеда (12:30). Эти значения требуется удалить.
В аттаче скрин.
(Прошу прощения возможно объясняю не так, совсем недавно начал работать с SQl, знаний маловато-учусь).
Какую информацию ещё нужно предоставить для помощи?
Неактивен
Давайте попробуем сначала от частного к общему .
Если Вы хотите удалить, допустим, записи о вхождениях/выхождениях за 5 апреля 2010 года с половины первого дня до трех часов дня, то такой запрос должен помочь:
mangust написал:
Какую информацию ещё нужно предоставить для помощи?
Опишите остальные поля на всякий случай, если будете еще что-то спрашивать. И когда приводите таблицу, то сильно облегчает, если приводите ее структуру (результат запроса
Отредактированно deadka (04.04.2011 14:30:21)
Неактивен
deadka написал:
Если Вы хотите удалить, допустим, записи о вхождениях/выхождениях за 5 апреля 2010 года с половины первого дня до трех часов дня, то такой запрос должен помочь:
немного неправильно я объяснил нужно удалять в определённом временном промежутке значения по табельному номеру (tab_n) пропуска, каждый работник проходит по магнитной кнопке, которая считывает его, и заносит в базу данных.
CREATE TABLE `passage` (
`key` int(11) NOT NULL AUTO_INCREMENT,
`tab_n` int(11) DEFAULT '0',
`ID_PASS` varchar(50) DEFAULT NULL,
`N_GAT` int(11) DEFAULT NULL,
`time` time DEFAULT NULL,
`DATE` varchar(10) DEFAULT NULL,
`CODE` tinyint(4) DEFAULT NULL,
`DIR` bit(1) DEFAULT NULL,
`NEW` bit(1) DEFAULT b'1',
`MOMENT` double DEFAULT NULL,
PRIMARY KEY (`key`),
KEY `time` (`time`),
KEY `tab_n` (`tab_n`),
KEY `date` (`DATE`),
KEY `dir` (`DIR`),
KEY `ID_PASS` (`ID_PASS`)
) ENGINE=InnoDB AUTO_INCREMENT=733880 DEFAULT CHARSET=latin1
Если возможно укажите пожалуйста ваш ICQ, хотелось бы с Вами пообщаться...
Отредактированно mangust (04.04.2011 14:55:48)
Неактивен
mangust написал:
немного неправильно я объяснил нужно удалять в определённом временном промежутке значения по табельному номеру (tab_n) пропуска, каждый работник проходит по магнитной кнопке, которая считывает его, и заносит в базу данных.
Ну, то есть, видимо, почти то же самое, просто еще ставим
mangust написал:
Если возможно укажите пожалуйста ваш ICQ, хотелось бы с Вами пообщаться...
Все возможно, но чем Вам не нравится способ общения на форуме ?
Отредактированно deadka (04.04.2011 14:59:42)
Неактивен
deadka написал:
mangust написал:
немного неправильно я объяснил нужно удалять в определённом временном промежутке значения по табельному номеру (tab_n) пропуска, каждый работник проходит по магнитной кнопке, которая считывает его, и заносит в базу данных.
Ну, то есть, видимо, почти то же самое, просто еще ставим
delete from `passage` where `tab_n`='НУЖНЫЙ_НОМЕР_tab_n' and `DATE`='2010-04-05' and (`time`>='12:30:00' and `time`<'15:00:00');
Да спасибо, всё отлично, то что надо. Так же вопрос на изменение существующего значения какой должен быть запрос?mangust написал:
Если возможно укажите пожалуйста ваш ICQ, хотелось бы с Вами пообщаться...
Все возможно, но чем Вам не нравится способ общения на форуме ?
Нет, всё нравится, просто хотел пообщаться, да и так, иногда спросить не у кого, совет нужен.
Отредактированно mangust (04.04.2011 15:06:02)
Неактивен
mangust написал:
Так же вопрос на изменение существующего значения какой должен быть запрос?
Какое именно значение Вы хотите изменить? И какое условие на изменение?
http://dev.mysql.com/doc/refman/5.0/en/update.html
http://www.mysql.ru/docs/man/UPDATE.html
mangust написал:
Нет, всё нравится, просто хотел пообщаться, да и так, иногда спросить не у кого, совет нужен.
Ну так и спрашивайте на форуме, чем сможем - поможем.
Отредактированно deadka (04.04.2011 15:12:48)
Неактивен
После запроса строки не удаляет...
delete from `passage` where `tab_n`='2021' and `DATE`='2011-04-04' and (`time`>='12:30:00' and `time`<'15:00:00');
Удалено строк: 0. ( запрос занял 0.0011 сек. )
Отредактированно mangust (04.04.2011 15:48:29)
Неактивен
Собственно нашёл ошибку, формат времени по другому прописывать...
Неактивен
deadka написал:
mangust написал:
Так же вопрос на изменение существующего значения какой должен быть запрос?
Какое именно значение Вы хотите изменить? И какое условие на изменение?
http://dev.mysql.com/doc/refman/5.0/en/update.html
http://www.mysql.ru/docs/man/UPDATE.html
изменение значения DATE и time на нужное из таблицы рассмотренной выше...
Неактивен
Критерий какие именно строки изменять я так и не понял.
Попробуйте так (например, меняем там, где tab_n=10):
Отредактированно deadka (04.04.2011 17:15:19)
Неактивен
deadka написал:
Критерий какие именно строки изменять я так и не понял.
Попробуйте так (например, меняем там, где tab_n=10):update `passage` set `DATE`='НУЖНАЯ_ДАТА', `time`='НУЖНОЕ_ВРЕМЯ' where `tab_n=10`;
И не вздумайте послать запрос без условия where - поменяет все записи сразу - и назад не вернешь потом. Так что тренироваться тут явно стоит на тестовых данных .
Да всё отлично получилось, спасибо.
Неактивен
Вопрос похожего плана, но боюсь ошибиться, в этой же базе SQL описанной выше, требуется удалить все значения выхода и входа до 01.12.2010, какая команда должна быть? Так же требуется создать резервную копию до удаления...
Неактивен
Для того, чтобы создать резервную копию нужно создать таблицу с той же структурой
mangust написал:
требуется удалить все значения выхода и входа до 01.12.2010
А каков признак входа/выхода? DIR?
Если так, то посмотрите вот эти запросы:
Неактивен
deadka, благодарю, Вы очень помогли!
Отредактированно mangust (13.04.2011 16:35:28)
Неактивен
Осторожно!
DATE - об'явлен как строка:
Неактивен
vaspet написал:
Осторожно!
DATE - об'явлен как строка:`DATE` varchar(10) DEFAULT NULL
а значит под условие:delete from `passage` where `DATE`<'05.09.2010';
попадут также строки:'04.10.2010', '05.04.2011',...
и НЕпопадут такие строки:'10.08.2010', '05.10.2009',...
а как возможно сделать что бы и эти даты были учтены и за 2011 не учтены?
Неактивен
В поле 'DATE' хранит' действител'но дату (тип DATE)
или если всеже строкой, то в формате "ГОД МЕСЯЦ ДЕНь" чтобы сравнение строк происходило в правил'ном порядке (от 0 до конца строки)
Неактивен
Ох, слона-то я и не приметил! vaspet абсолютно прав. То-то думаю, странно, что дата хранится в формате dd.mm.yyyy...
mangust, с этим полем DATE действительно стоит "разобраться".
У него должен быть тип не varchar, а тип date (а вообще, если честно, то лучше бы наверное положить поля date и time в одно поле datetime и с ним уже работать) и в этом случае сравнение будет работать как положено, и удалится ровно то, что должно удалиться.
Как это сделать:
1) преобразовать строку `DATE` в нужный формат - yyyy-mm-dd
В том случае, если у Вас в поле `DATE` всегда четко отведено под день и месяц по два символа, а на год 4 годится вот такой запрос:
Отредактированно deadka (13.04.2011 22:08:05)
Неактивен
Собственно немного почитав документацию и проанализировав ответы форумчан сделал немного другим способом:
1. Бэкап сделал через экспорт, phpMySQL
2. Удаление значений за 2010 год сделал так - delete from passage where passage.date like '%.2011'; т.к. date текстовое, то использовал LIKE
Спасибо всем за помощь
Неактивен
Я все же категорически рекомендую преобразовать тип `DATE` в date из varchar - этим Вы обезопасите себя (и своих последователей) от потенциальных ошибок.
Неактивен
deadka написал:
Я все же категорически рекомендую преобразовать тип `DATE` в date из varchar - этим Вы обезопасите себя (и своих последователей) от потенциальных ошибок.
Да я понимаю, но дело в том что программа (которая и заносит значения в базу данных с турникетов) на отказ не хочет работать с типом varchar.
Неактивен
Не понял Вас - так я и предлагаю использовать тип date вместо типа varchar.
Неактивен
deadka написал:
Не понял Вас - так я и предлагаю использовать тип date вместо типа varchar.
да, прошу прощения, описался - программа не хочет воспринимать тип date.
Неактивен
Интересно, что ж за программа такая . Ну тогда следите аккуратно за всеми операциями с полем `DATE` ...
Неактивен
"Автоматизированное рабочее место управления проходной" - Decagon
Неактивен