|
|
|
| Здравствуйте.
в табличке есть столбец
`id` INT(6) NOT NULL auto_increment,
некоторые записи были удалены.
Можно как нибудь получить id которых не хватает? | |
|
|
|
|
|
|
|
для: 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); | |
|
|
|
|
|
|
|
для: loli
(20.12.2010 в 14:39)
| | А зачем бы они могли бы понадобиться, эти отсутствующие id?
автоинкрементное поле в MySQL - это всегда первичный ключ.
А значения первичного ключа, после того как запись удалена из таблицы, теряет всякий смысл. | |
|
|
|
|
|
|
|
для: Trianon
(20.12.2010 в 17:15)
| | Работал парсер, заполнял данными бд, иногда отробатывал не правильно, и и в таблицу попадал мусор, такие записи удалилялись.
Сейчас решили все таки заполнить недостающие записи, для этого нужно знать недостающие id.
так сложилось что поле id совпадало с id страницы которую парсим ) | |
|
|
|
|
|
|
|
для: loli
(20.12.2010 в 19:08)
| | >Работал парсер, заполнял данными бд, иногда отробатывал не правильно, и и в таблицу попадал мусор, такие записи удалилялись.
>Сейчас решили все таки заполнить недостающие записи, для этого нужно знать недостающие id.
ничего страшного, если вновь созданные записи будут иметь следующие id.
>так сложилось что поле id совпадало с id страницы которую парсим )
Тогда источником является id страницы - по ним и нужно бежать, проверяя, существует ли такая запиь в таблице.
Неясно, правда, каким образом у Вас в таблице поле оказалось инкрементным, если его значение Вы брали со потока страниц.
Что-то Вы недоговариваете... | |
|
|
|
|
|
|
|
для: Trianon
(20.12.2010 в 19:14)
| | да, недоговариваю ) есть еще одно поле...
`id` сплошное инкрементное, и page_id обычный int.
найти разряженность нужно в page_id. но суть задачи от этого не меняется помоему )) | |
|
|
|
|
|
|
|
для: loli
(20.12.2010 в 19:52)
| | А нафига?
Было бы одно поле - page_id, первичный ключ, с ai, и вот вам щастье.
Ибо, насколько я понял, у вас id и page_id должны иметь одно и то же значение - объединение этих полей в одно само собой напрашивается. | |
|
|
|
|
|
|
|
для: 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
То есть живой первичный ключ, запись которого никуда не делась. | |
|
|
|