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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Как узнать id-шники, которых нет?
 
 автор: svs1608   (29.01.2007 в 19:08)   письмо автору
 
 

Есть большая таблица (ок. 200 тыс. записей). В результате ошибок сервера были удалены некоторые записи. В таблице есть первичный ключ (id) с автоинкрементом. Можно ли каким-нибудь образом узнать id удаленных записей?

   
 
 автор: cheops   (29.01.2007 в 21:09)   письмо автору
 
   для: svs1608   (29.01.2007 в 19:08)
 

Сейчас что-нибудь придумаем? Версия MySQL выше 4.1, т.е. можно использовать вложенные запросы?

   
 
 автор: cheops   (29.01.2007 в 21:24)   письмо автору
 
   для: svs1608   (29.01.2007 в 19:08)
 

Хотя наверное ничего лучше чем извлечь номера существующих записей в PHP-скрпт и проверить скрипт отсутствующие элементы не придумаешь...

   
 
 автор: svs1608   (30.01.2007 в 01:21)   письмо автору
 
   для: cheops   (29.01.2007 в 21:24)
 

да, mysql 5-й версии.. лучше все-таки обойтись без пхп..

   
 
 автор: Trianon   (30.01.2007 в 01:32)   письмо автору
 
   для: svs1608   (30.01.2007 в 01:21)
 

Диапазоны непрерывности, вероятно, можно определить следующим запросом

SELECT a.id, b.id 
FROM tab AS a 
  OUTER JOIN tab AS b ON a.id=b.id-1 
WHERE a.id IS NULL OR b.id IS NULL

Если только сервер его схавает.
А с другой стороны, почему бы ему его не схвавать?

   
 
 автор: cheops   (30.01.2007 в 16:50)   письмо автору
 
   для: svs1608   (29.01.2007 в 19:08)
 

Вот чего ещё в дополнение к Trianon придумал, можно создать хранимую процедуру
CREATE PROCEDURE empty_value (OUT result TEXT)
LANGUAGE SQL
BEGIN
  DECLARE i INT DEFAULT 0;
  DECLARE x INT DEFAULT 0;
  SET result = "";
  WHILE i < 200000 DO
    SET x = NULL;
    SELECT i INTO x FROM DUAL WHERE i IN (SELECT id FROM tbl);
    IF(x IS NULL) THEN
      SET result = CONCAT(result," ",i);
    END IF;
    SET i = i + 1;
  END WHILE;
END

и вызывать её следующи образом
CALL empty_value(@result);
SELECT @result;

Оно конечно может и не быстро выйдет, но зато без PHP и готово к использованию :)))

   
Rambler's Top100
вверх

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