За последние 24 часа нас посетили 16854 программиста и 1646 роботов. Сейчас ищут 948 программистов ...

Удаление нескольких строк с условием

Тема в разделе "MySQL", создана пользователем Alexnewaro, 4 дек 2015.

  1. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    подзапросом ;)
     
  2. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Мне в голову пришло только сделать выборку всех свободных строк, а затем через foreach для каждого из результатов сделать запрос на удаление конкретного id. А если удаляют 100 номеров - это ж 100 запросов за раз!
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    да чтож ты так сопротивляешься подзапросу?
     
  4. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    В итоге все отлично работает вот так:

    Код (PHP):
    1. if($free_acc > $delete_quote)
    2.                 {
    3.                     for ($r=1;$r<=$delete_quote;$r++)
    4.                     {
    5.                         $res4 = $db->query("DELETE FROM `event_roomnum`
    6.                                            WHERE `chain_hotelroom_id` = '$chain_hotelroom_id'
    7.                                            AND `roomnum_id` NOT IN (SELECT `roomnum_id` FROM `event_acc`
    8.                                            WHERE `chain_hotelroom_id` = '$chain_hotelroom_id') LIMIT 1")
    9.                         or die($db->error);
    10.                     }
    11.                 }
    12.                 else
    13.                 {
    14.                     echo '<br>вы пытаетесь удалить больше номеров, чем свободно';
    15.                 } 
    Добавлено спустя 1 минуту 17 секунд:
    Сопротивляюсь не то слово :)
    Если когда-нибудь найду другое решение - сразу поменяю ))))
    Начитался ваших же ссылок (ранее), про медленную работу IN и NOT IN и необходимость использование JOIN для ускорения )))

    Добавлено спустя 22 секунды:
    Огромное вам спасибо, дружище.
    Пива, пива и еще раз пива!

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    проблема в том что ты не знаком с азами а уже пытаешься понимать что-то сложное. я бы на твоем месте сделал замеры под конкретную задачу и потом уже по факту утверждал что медленнее а что быстрее. во многих субд есть оптимизатор запроса, который на этапе разбора составляет так называемый план запроса - наиболее эффективный по мнению движка алгоритм выбора, фильтрации, агрегации, фильтрации (да, повторной, для агрегатов), сортировки и пагинации.
    например, таблица может быть индексирована, но оптимизатор выберет неверный индекс, что приведет к замедлению работы. это будет видно и можно будет руками прописать какой именно индекс на каком этапе использовать. и такими хаками добиться оптимальной и быстрой работы запроса под конкретную задачу. а прочитав где-то обобщенный материал считать что джоинить быстрее чем делать подзапрос - неверно.
     
  6. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    понял, буду начитывать.
    еще раз спасибо большое ))
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Медленно?! Надо добиться правильного результата, только потом пытаться что-то "оптимизировать".

    Я телепат. Наличие LIMIT в DELETE стопудово говорит о непонимании задачи. Удалять надо то, что нужно удалять. А не несколько каких-то строк.
     
  8. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Согласен с вами, однако хочется какие-то вещи ПЫТАТЬСЯ делать изначально оптимизированно, коль скоро информация с наводками на эту тему оказалась под рукой. Но постараюсь следовать вашему совету.

    Но ряса межгалактического телепата вам не идет.
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    это чуть ли не самый провальный путь. когда у тебя есть опыт оптимизации ты можешь спроектировать приложение оптимальным путём. но собственно оптимизацию ты будешь проводить на реально реально работающем приложении. пытаться оптимизировать еще не написанное да еще и при нулевых знаниях - пустая трата времени. причем в прямом смысле - после запуска окажется что всё тупит и тормозит и через жопу написано - а время-то уже вон сколько было потрачено на никому не нужные действия.
     
  10. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1