Как быть

Тема в разделе "Базы данных", создана пользователем bumer3, 9 янв 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. bumer3

    bumer3

    Регистр.:
    10 янв 2008
    Сообщения:
    291
    Симпатии:
    154
    Народ есть три таблици
    1 список файлов
    2. списки скачивания файлов для каждого из 1 таблици
    3. список файлов в архивах для каждого из 1 таблици

    так вот мне нужно почистить 2 и 3, чтобы удалить в них записи с ID файлов, которых нет в 1 таблици.

    (1 таблицу когда чистил забыл про 2 и 3)
    а там щас такие размеры и немного все тормозит помогите как быть
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    В чём проблема?
    Если хочешь получить готовый запрос, приведи структуру таблицы.
    Если нет, то задай вопрос по человечески.
     
  3. F1NaL

    F1NaL Постоялец

    Регистр.:
    18 дек 2007
    Сообщения:
    83
    Симпатии:
    21
    ну самое простое но туповатое сделать цикл
    Код:
    for($i=0; $i < последнего ид; $i++)
       {
        $result = $db->query ( "SELECT * FROM таблица WHERE id = '$i'" );
        if ( $db->num_rows ( $result ) == 0 )
             {
             $sql = "DELETE FROM таблица2 WHERE id='$i' LIMIT 1";
    	 $db->query ( $sql );
    
             $sql = "DELETE FROM таблица3 WHERE id='$i' LIMIT 1";
    	 $db->query ( $sql );
             }
        }
    
    
    $db - класс для работы с MySql, команды впринцапе понятные
     
  4. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Не туповатое, а вообще дебильное. Кроме того не правильное :D
     
  5. B1rdEX

    B1rdEX Постоялец

    Регистр.:
    30 июн 2008
    Сообщения:
    141
    Симпатии:
    26
    ну как-то так :)
    Код:
    delete from table_number_2 where table1_id not in (select distinct id from table_number_1)

    Также и для третьей. Запрос медленный, + работает в mysql 5+.
    table_number_2 - вторая таблица,
    table1_id - зависимый id из 1-ой таблице во второй.
     
    bumer3 нравится это.
  6. bumer3

    bumer3

    Регистр.:
    10 янв 2008
    Сообщения:
    291
    Симпатии:
    154
    Последний совет то чно надо я и не подумал что так можно сделать. сенци за помощь!!!
     
  7. nops

    nops

    Регистр.:
    10 дек 2008
    Сообщения:
    262
    Симпатии:
    7
    :bc:Да уж. Для меня это тёмный лес.
     
  8. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Можно вообще всё сделать одним запросом.
    Но, как показывает практика, иногда в плане оптимизации нагрузки на БД имеет смысл дёргать по одной записи в цикле.
     
  9. B1rdEX

    B1rdEX Постоялец

    Регистр.:
    30 июн 2008
    Сообщения:
    141
    Симпатии:
    26
    Ну, ТС вроде о оптимизации вообще речи не вёл.. Это я случайно ляпнул, потому что запрос реально медленный (хотя зависит от объёма).

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

    Ну а если сервер совсем хилый.. Удалять в цикле + sleep/usleep().
     
  10. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Да я не оспаривал твой пост ;) Так, лирическое отступление.
     
Статус темы:
Закрыта.