Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Удаление записей из нескольких таблиц

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
alnik-75
Отправлено: 18 Октября, 2015 - 23:42:52
Post Id



Посетитель


Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012  
Откуда: Гродно, Беларусь


Помог: 0 раз(а)




Здравствуйте, уважаемые форумчане!!!

Нужна Ваша консультация!

Есть таблица с объявлениями - declarations (идентификатор объявлений - id).

Задача- удалить, например, какое-то конкретное объявление.

Помимо этой таблицы, имеются другие таблицы, связи которых с таблицей declarations осуществляется через поля id_ads.
- foto_ads; // фото к объявлениям
- ads_views; // просмотры объявлений
- ads_violations; // жалобы на объявления
- reset_views // сведения об обнулении счетчиков просмотров объявлений.

Как уже сказал выше в каждой из этих таблиц имеются поля - id_ads, связывающие их с основной таблицей.

Когда все создавал, то удалял путем запросов DELETE к каждой из этих таблиц.

Хочу сделать более оптимизировано с помощью одного запроса. Погуглил и вот, что получилось:

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2.  
  3.    DELETE declarations, foto_ads, ads_views, ads_violations, reset_views // указываю все таблицы, включая и основную - declarations
  4.    FROM declarations
  5.        LEFT JOIN foto_ads
  6.          ON foto_ads.id_ads = declarations.id
  7.        LEFT JOIN ads_views
  8.          ON ads_views.id_ads = declarations.id
  9.        LEFT JOIN ads_violations
  10.          ON ads_violations.id_ads = declarations.id
  11.        LEFT JOIN reset_views
  12.          ON reset_views .id_ads = declarations.id  
  13.   WHERE declarations.id = 1000;
  14.  
  15.  


Вопрос: правильный ли синтаксис? и нужно ли после оператора DELETE указывать, помимо связанных с главной таблицей declarations, и саму эту главную таблицу? Или ее нужно указывать только после конструкции FROM ?

Заранее выражаю благодарность за оказанное содействие..
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Октября, 2015 - 01:04:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Лучше всего всегда указывать все таблицы.
Если влом писать полные их имена -- есть алиасы, которые в этом помогут.
Пример:
CODE (SQL):
скопировать код в буфер обмена
  1. DELETE FROM long_long_table1_name t1
  2.     WHERE t1.a IN(SELECT t2.a FROM long_long_table2_name t2)
 
 Top
alnik-75
Отправлено: 19 Октября, 2015 - 20:38:14
Post Id



Посетитель


Покинул форум
Сообщений всего: 338
Дата рег-ции: Сент. 2012  
Откуда: Гродно, Беларусь


Помог: 0 раз(а)




Добрый вечер!!

Немного усложняется задача. Имеется таблица users (id-идентификатор). Данная таблица связана только с таблицей declarations (в которой есть поле id_user)/ Как уже писал выше, в свою очередь таблица declarations связано с другими таблицами посредством id_ads (идентификатор объявления).

Задача удалить одним запросом запись о пользователе . При наличии объявлений и фото к ним удалить записи в других таблицах, указанных в первом посте.

Заранее благодарю
 
 Top
and_07
Отправлено: 20 Октября, 2015 - 09:28:15
Post Id


Гость


Покинул форум
Сообщений всего: 91
Дата рег-ции: Сент. 2012  


Помог: 3 раз(а)




что за база?
внешние ключи разве не решат данную задачу

ну или триггер написать

нет?

(Отредактировано автором: 20 Октября, 2015 - 09:29:32)

 
 Top
Dastor
Отправлено: 20 Октября, 2015 - 09:44:57
Post Id


Гость


Покинул форум
Сообщений всего: 66
Дата рег-ции: Окт. 2014  


Помог: 3 раз(а)




Грамотная настройка внешних ключей с каскадным удалением должна решить задачу.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB