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

Форум MySQL

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

 

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

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

тема: Получить отсутствующие id
 
 автор: loli   (20.12.2010 в 14:39)   письмо автору
 
 

Здравствуйте.
в табличке есть столбец
`id` INT(6) NOT NULL auto_increment,
некоторые записи были удалены.
Можно как нибудь получить id которых не хватает?

  Ответить  
 
 автор: Лена   (20.12.2010 в 14:54)   письмо автору
 
   для: loli   (20.12.2010 в 14:39)
 

Выбираем все id, которые есть в базе, получаем массив $row.
Выбираем максимальный id - "SELECT MAX(id) FROM table"
пусть $max_id - полученный максимальный id
В цикле формируем еще один массив:

for($i=1;$i<$max_id;$i++)
$arr[] = $i;

Сравниваем два массива, вычисляем их расхождения, это и будет массив id`ов, которых нет в базе:
$result = array_diff ($row, $arr);

  Ответить  
 
 автор: Trianon   (20.12.2010 в 17:15)   письмо автору
 
   для: loli   (20.12.2010 в 14:39)
 

А зачем бы они могли бы понадобиться, эти отсутствующие id?

автоинкрементное поле в MySQL - это всегда первичный ключ.
А значения первичного ключа, после того как запись удалена из таблицы, теряет всякий смысл.

  Ответить  
 
 автор: loli   (20.12.2010 в 19:08)   письмо автору
 
   для: Trianon   (20.12.2010 в 17:15)
 

Работал парсер, заполнял данными бд, иногда отробатывал не правильно, и и в таблицу попадал мусор, такие записи удалилялись.

Сейчас решили все таки заполнить недостающие записи, для этого нужно знать недостающие id.
так сложилось что поле id совпадало с id страницы которую парсим )

  Ответить  
 
 автор: Trianon   (20.12.2010 в 19:14)   письмо автору
 
   для: loli   (20.12.2010 в 19:08)
 

>Работал парсер, заполнял данными бд, иногда отробатывал не правильно, и и в таблицу попадал мусор, такие записи удалилялись.

>Сейчас решили все таки заполнить недостающие записи, для этого нужно знать недостающие id.

ничего страшного, если вновь созданные записи будут иметь следующие id.


>так сложилось что поле id совпадало с id страницы которую парсим )

Тогда источником является id страницы - по ним и нужно бежать, проверяя, существует ли такая запиь в таблице.
Неясно, правда, каким образом у Вас в таблице поле оказалось инкрементным, если его значение Вы брали со потока страниц.
Что-то Вы недоговариваете...

  Ответить  
 
 автор: loli   (20.12.2010 в 19:52)   письмо автору
 
   для: Trianon   (20.12.2010 в 19:14)
 

да, недоговариваю ) есть еще одно поле...
`id` сплошное инкрементное, и page_id обычный int.
найти разряженность нужно в page_id. но суть задачи от этого не меняется помоему ))

  Ответить  
 
 автор: neadekvat   (20.12.2010 в 20:26)   письмо автору
 
   для: loli   (20.12.2010 в 19:52)
 

А нафига?
Было бы одно поле - page_id, первичный ключ, с ai, и вот вам щастье.
Ибо, насколько я понял, у вас id и page_id должны иметь одно и то же значение - объединение этих полей в одно само собой напрашивается.

  Ответить  
 
 автор: Trianon   (20.12.2010 в 20:43)   письмо автору
 
   для: loli   (20.12.2010 в 19:52)
 

меняется, при чем существенно.
Первичные ключи повторно не используют - это жесткое правило.
Если страницы описыны в таблице pages, а те пропавшие объекты, где это самое page_id указывало на id страниц (b пропало вместе с объектом) - в таблице objects, вот таким запросом определяются страницы, для которых пропали объекты.

SELECT pages.id 
  FROM pages 
    LEFT JOIN objects ON pages.id = objects.page_id
WHERE objects.page_id IS NULL


Заметьте, мы извлекаем pages.id
То есть живой первичный ключ, запись которого никуда не делась.

  Ответить  
Rambler's Top100
вверх

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