|
|
|
| Заделал такой запрос:
$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";
|
Вопрос:
Не будет ли он сильно тормозить? Может лучше удалять из каждой таблицы по отдельности? | |
|
|
|
|
|
|
|
для: tAleks
(11.12.2007 в 20:57)
| | Вы LEFT JOIN с RIGHT JOIN часом не перепутали? | |
|
|
|
|
|
|
|
для: Trianon
(11.12.2007 в 21:11)
| | Судя по всему, что автор перепутал. Но сработать то он сработает, только насчет торможения как раз и скорее и будет тормозить. | |
|
|
|
|
|
|
|
для: Faraon
(11.12.2007 в 21:30)
| | Если эта штука сработает при отсутствующем в цепочке join-ов id (к примеру при незаданном $id) - она снесет нахрен все три подключенные таблицы.
При нормально расставленных индексах и исправленном запросе тормозить ничего не будет.
Кстати, при отдельных запросах работать будет всяко медленнее. Независимо от того стоят индексы или нет.
PS. я все же оставляю шанс, что автор написал именно то, что собирался.
Поэтому мой вопрос автору остается в силе. | |
|
|
|
|
|
|
|
для: Trianon
(11.12.2007 в 21:41)
| | Насчет $id это надо проверять перед запросом.
>При нормально расставленных индексах.
Автор это не указал , и не привел структуру таблиц. | |
|
|
|
|
|
|
|
для: Faraon
(11.12.2007 в 21:51)
| | >Насчет $id это надо проверять перед запросом.
Что проверять?
А если нужно будет удалить id который вообще связных элементов во второй таблице не имеет?
Тогда что? Прощай третья и четвертая таблицы?
>>При нормально расставленных индексах.
>Автор это не указал ,
Еще раз. Ответ на вопрос не зависит от этого.
> и не привел структуру таблиц.
А я то тут при чем? | |
|
|
|
|
|
|
|
для: Trianon
(11.12.2007 в 22:03)
| | Судя по всему, во второй таблице должен быть этот элемент id, иначе полный абсурд
Trianon Вы сами подумайте если во второй таблице не будет того id что был задан в первой, то судя по запросу дальше это не пойдет, так как запрос составлен иерархической структурой | |
|
|
|
|
|
|
|
для: Trianon
(11.12.2007 в 21:41)
| | >Если эта штука сработает при отсутствующем в цепочке join-ов id (к примеру при незаданном $id) - она снесет нахрен все три подключенные таблицы.
Как это? Если переменная $id будет равна нулю, то ничего запрос не снесет. А если пустой строке, NULL или FALSE, то как я пологаю запрос просто не выполниться. Или я не прав? | |
|
|
|
|
|
|
|
для: tAleks
(11.12.2007 в 22:24)
| | Замените DELETE от греха подальше на SELECT с тем же табличным выражением, и поглядите, сколько строк Вам выдадут. :) | |
|
|
|
|
|
|
|
для: Trianon
(11.12.2007 в 22:26)
| | Спасибо за рекомендацию, попробую перед удалением... :) | |
|
|
|
|
|
|
|
для: Trianon
(11.12.2007 в 21:41)
| | Протестировал сегодня этот запрос.
Все работает так, как задумывалось.
При отстутствующем $id все таблицы остаются целыми. | |
|
|
|
|
|
|
|
для: tAleks
(18.12.2007 в 20:36)
| | Ну соответственно, условия то нету. | |
|
|
|
|
|
|
|
для: Trianon
(11.12.2007 в 21:11)
| | Не, LEFT JOIN с RIGHT JOIN я не перепутал. Хотя запрос еще не тестировал.
Задача запроса грохнуть со всех таблиц все записи в которых id_nmc = $id, не зависимо от того, в каких табицах записи есть, а в каких их нет. | |
|
|
|
|
|
|
|
для: tAleks
(11.12.2007 в 22:19)
| | Тогда осторожнее с тестами. Советую перед тестированием снять дамп с таблиц. | |
|
|
|