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

Форум MySQL

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

 

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

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

тема: Удаление из нескольких таблиц
 
 автор: tAleks   (11.12.2007 в 20:57)   письмо автору
 
 

Заделал такой запрос:

$sql_del = "
                        DELETE
                            mag_nmc, 
                            mag_nmc_components, 
                            mag_nmc_analogues, 
                            mag_prices 
                        FROM mag_nmc 
                            RIGHT JOIN    mag_nmc_components ON mag_nmc.id_nmc = mag_nmc_components.id_nmc
                            RIGHT JOIN    mag_nmc_analogues ON mag_nmc.id_nmc = mag_nmc_analogues.id_nmc
                            RIGHT JOIN    mag_prices ON mag_nmc.id_nmc = mag_prices.id_nmc
                        WHERE mag_nmc.id_nmc = $id";


Вопрос:
Не будет ли он сильно тормозить? Может лучше удалять из каждой таблицы по отдельности?

   
 
 автор: Trianon   (11.12.2007 в 21:11)   письмо автору
 
   для: tAleks   (11.12.2007 в 20:57)
 

Вы LEFT JOIN с RIGHT JOIN часом не перепутали?

   
 
 автор: Faraon   (11.12.2007 в 21:30)   письмо автору
 
   для: Trianon   (11.12.2007 в 21:11)
 

Судя по всему, что автор перепутал. Но сработать то он сработает, только насчет торможения как раз и скорее и будет тормозить.

   
 
 автор: Trianon   (11.12.2007 в 21:41)   письмо автору
 
   для: Faraon   (11.12.2007 в 21:30)
 

Если эта штука сработает при отсутствующем в цепочке join-ов id (к примеру при незаданном $id) - она снесет нахрен все три подключенные таблицы.

При нормально расставленных индексах и исправленном запросе тормозить ничего не будет.
Кстати, при отдельных запросах работать будет всяко медленнее. Независимо от того стоят индексы или нет.

PS. я все же оставляю шанс, что автор написал именно то, что собирался.
Поэтому мой вопрос автору остается в силе.

   
 
 автор: Faraon   (11.12.2007 в 21:51)   письмо автору
 
   для: Trianon   (11.12.2007 в 21:41)
 

Насчет $id это надо проверять перед запросом.
>При нормально расставленных индексах.
Автор это не указал , и не привел структуру таблиц.

   
 
 автор: Trianon   (11.12.2007 в 22:03)   письмо автору
 
   для: Faraon   (11.12.2007 в 21:51)
 

>Насчет $id это надо проверять перед запросом.

Что проверять?
А если нужно будет удалить id который вообще связных элементов во второй таблице не имеет?
Тогда что? Прощай третья и четвертая таблицы?

>>При нормально расставленных индексах.
>Автор это не указал ,

Еще раз. Ответ на вопрос не зависит от этого.

> и не привел структуру таблиц.

А я то тут при чем?

   
 
 автор: Faraon   (11.12.2007 в 22:35)   письмо автору
 
   для: Trianon   (11.12.2007 в 22:03)
 

Судя по всему, во второй таблице должен быть этот элемент id, иначе полный абсурд
Trianon Вы сами подумайте если во второй таблице не будет того id что был задан в первой, то судя по запросу дальше это не пойдет, так как запрос составлен иерархической структурой

   
 
 автор: tAleks   (11.12.2007 в 22:24)   письмо автору
 
   для: Trianon   (11.12.2007 в 21:41)
 

>Если эта штука сработает при отсутствующем в цепочке join-ов id (к примеру при незаданном $id) - она снесет нахрен все три подключенные таблицы.

Как это? Если переменная $id будет равна нулю, то ничего запрос не снесет. А если пустой строке, NULL или FALSE, то как я пологаю запрос просто не выполниться. Или я не прав?

   
 
 автор: Trianon   (11.12.2007 в 22:26)   письмо автору
 
   для: tAleks   (11.12.2007 в 22:24)
 

Замените DELETE от греха подальше на SELECT с тем же табличным выражением, и поглядите, сколько строк Вам выдадут. :)

   
 
 автор: tAleks   (11.12.2007 в 22:33)   письмо автору
 
   для: Trianon   (11.12.2007 в 22:26)
 

Спасибо за рекомендацию, попробую перед удалением... :)

   
 
 автор: tAleks   (18.12.2007 в 20:36)   письмо автору
 
   для: Trianon   (11.12.2007 в 21:41)
 

Протестировал сегодня этот запрос.
Все работает так, как задумывалось.
При отстутствующем $id все таблицы остаются целыми.

   
 
 автор: Faraon   (18.12.2007 в 22:24)   письмо автору
 
   для: tAleks   (18.12.2007 в 20:36)
 

Ну соответственно, условия то нету.

   
 
 автор: tAleks   (11.12.2007 в 22:19)   письмо автору
 
   для: Trianon   (11.12.2007 в 21:11)
 

Не, LEFT JOIN с RIGHT JOIN я не перепутал. Хотя запрос еще не тестировал.

Задача запроса грохнуть со всех таблиц все записи в которых id_nmc = $id, не зависимо от того, в каких табицах записи есть, а в каких их нет.

   
 
 автор: Trianon   (11.12.2007 в 22:25)   письмо автору
 
   для: tAleks   (11.12.2007 в 22:19)
 

Тогда осторожнее с тестами. Советую перед тестированием снять дамп с таблиц.

   
Rambler's Top100
вверх

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