Мне в голову пришло только сделать выборку всех свободных строк, а затем через foreach для каждого из результатов сделать запрос на удаление конкретного id. А если удаляют 100 номеров - это ж 100 запросов за раз!
В итоге все отлично работает вот так: Код (PHP): if($free_acc > $delete_quote) { for ($r=1;$r<=$delete_quote;$r++) { $res4 = $db->query("DELETE FROM `event_roomnum` WHERE `chain_hotelroom_id` = '$chain_hotelroom_id' AND `roomnum_id` NOT IN (SELECT `roomnum_id` FROM `event_acc` WHERE `chain_hotelroom_id` = '$chain_hotelroom_id') LIMIT 1") or die($db->error); } } else { echo '<br>вы пытаетесь удалить больше номеров, чем свободно'; } Добавлено спустя 1 минуту 17 секунд: Сопротивляюсь не то слово Если когда-нибудь найду другое решение - сразу поменяю )))) Начитался ваших же ссылок (ранее), про медленную работу IN и NOT IN и необходимость использование JOIN для ускорения ))) Добавлено спустя 22 секунды: Огромное вам спасибо, дружище. Пива, пива и еще раз пива! PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
проблема в том что ты не знаком с азами а уже пытаешься понимать что-то сложное. я бы на твоем месте сделал замеры под конкретную задачу и потом уже по факту утверждал что медленнее а что быстрее. во многих субд есть оптимизатор запроса, который на этапе разбора составляет так называемый план запроса - наиболее эффективный по мнению движка алгоритм выбора, фильтрации, агрегации, фильтрации (да, повторной, для агрегатов), сортировки и пагинации. например, таблица может быть индексирована, но оптимизатор выберет неверный индекс, что приведет к замедлению работы. это будет видно и можно будет руками прописать какой именно индекс на каком этапе использовать. и такими хаками добиться оптимальной и быстрой работы запроса под конкретную задачу. а прочитав где-то обобщенный материал считать что джоинить быстрее чем делать подзапрос - неверно.
Медленно?! Надо добиться правильного результата, только потом пытаться что-то "оптимизировать". Я телепат. Наличие LIMIT в DELETE стопудово говорит о непонимании задачи. Удалять надо то, что нужно удалять. А не несколько каких-то строк.
Согласен с вами, однако хочется какие-то вещи ПЫТАТЬСЯ делать изначально оптимизированно, коль скоро информация с наводками на эту тему оказалась под рукой. Но постараюсь следовать вашему совету. Но ряса межгалактического телепата вам не идет.
это чуть ли не самый провальный путь. когда у тебя есть опыт оптимизации ты можешь спроектировать приложение оптимальным путём. но собственно оптимизацию ты будешь проводить на реально реально работающем приложении. пытаться оптимизировать еще не написанное да еще и при нулевых знаниях - пустая трата времени. причем в прямом смысле - после запуска окажется что всё тупит и тормозит и через жопу написано - а время-то уже вон сколько было потрачено на никому не нужные действия.