Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оптимизировать запрос DELETE 
V
    Опции темы
gcc
Дата 17.11.2009, 09:32 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



1) подскажите как оптимизировать такой запрос в один запрос?

как-то через join делают... тут  http://www.sql.ru/forum/actualthread.aspx?tid=678367

Код

  
    DELETE from friends                              
                  WHERE id_un = ?
                  AND id_un_friends = ?   


        DELETE from friends                              
                  WHERE id_un = ?
                  AND id_un_friends = ?   

            
            

        DELETE from send_friends                              
                  WHERE id_un = ?
                  AND id_un_friends = ? 


        DELETE from send_friends                              
                  WHERE id_un = ?
                  AND id_un_friends =? 
                  
                  


2) тут нужно это написать одном запросом или можно много маленьких запросов делать?

========
========

если нужно удалить несколько записей, то тут будет вот так?

Код


        DELETE from friends AS t1,
                            send_friends AS t2
                                                          
                  WHERE ( t1.id_un = ' '
                  AND t1.id_un_friends = '..'
                  ) OR (
                  t1.id_un = ' '
                  AND t1.id_un_friends = ''
                  )
                  OR                  
                  ( t2.id_un = ' '
                  AND t2.id_un_friends = ''
                  ) 
                  OR 
                  (
                  t2.id_un = ' '
                  AND t2.id_un_friends = ''
                  )  


это правильно?


НО, вопрос, если в этих 2 таблицах нужно удалить несколько элементов с оператором OR правильно?


UPD:
 этот запрос не работает, вопрос остается, как оптимизировать? подскажите пожалуйста

была ошибка:

Код

delete_friend "DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near 'WHERE ( t1.id_un = 33
                  AND t1.id_un_friends = 1
                  ) OR (
  ' at line 4 at


Это сообщение отредактировал(а) gcc - 18.11.2009, 04:33
PM WWW ICQ Skype GTalk Jabber   Вверх
Akina
Дата 17.11.2009, 10:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Это вообще-то форум по MySQL, и писАть тут код на другом языке, да ещё не указывая правильно тип кода - моветон.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
sir_nuf_nuf
Дата 17.11.2009, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 8
Всего: 31



gcc, а теперь на обычном языке: что ты хочешь сделать с таблицами ?
Да, можно удалять сразу из двух таблиц. Синтаксис точно такой же как и для select.
Все строки которые вошли в выборку будут удалены
Код

delete from A inner join B on A.id = B.id where B.value < 3 and A.value like 'hz%'


Это сообщение отредактировал(а) sir_nuf_nuf - 17.11.2009, 11:11


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
gcc
Дата 18.11.2009, 04:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



Akina, откорректироваол, я просто забыл удалить

Добавлено через 1 минуту и 35 секунд
sir_nuf_nuf, что-то я не понимаю...

во вором запросе в первом посте, а в чем ошибка где я пытался оптимизировать?? он не работает

мне связывать как бы не надо, мне надо удалить с двух таблиц....

тут нужно это написать одном запросом или можно много маленьких запросов делать?
PM WWW ICQ Skype GTalk Jabber   Вверх
Akina
Дата 18.11.2009, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



gcc, задавая вопрос по MySQL, следует указывать версию. Порой даже соседние билды сильно различаются. Например, в многотабличном операторе DELETE FROM версии 5 нельзя использовать JOIN, ORDER BY или LIMIT...

1) Набор запросов непонятен - почему две пары абсолютно идентичных запросов?
2) Та же история - вторая пара условий абсолютно идентична.

По удалению несвязанных записей из нескольких таблиц. Это невозможно в рамках одного оператора. Включите логику. Учтите, что всё начинается с декартова произведения.

Если надо удалять одним запросом данные из нескольких несвязанных таблиц - используйте хранимую процедуру или пользовательскую функцию.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
gcc
Дата 18.11.2009, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



Цитата(Akina @ 18.11.2009,  08:40)
По удалению несвязанных записей из нескольких таблиц. Это невозможно в рамках одного оператора. Включите логику. Учтите, что всё начинается с декартова произведения.


Код

mysql  Ver 14.12 Distrib 5.0.83, for portbld-freebsd8.0 (i386) using  5.2


хотел спросить с точки зрения теории, я вот хотел оптимизировать свои запросы, многие оптимизировал, а этот не получается

т.е. с 2 таблиц нельзя не несвязанных в одном запросе.... тогда сделаю только с одной...

Это сообщение отредактировал(а) gcc - 18.11.2009, 09:15
PM WWW ICQ Skype GTalk Jabber   Вверх
Akina
Дата 18.11.2009, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Два запроса. Если надо - в рамках транзакции.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
sir_nuf_nuf
Дата 19.11.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 8
Всего: 31



Цитата(Akina @  18.11.2009,  09:27 Найти цитируемый пост)
Если надо - в рамках транзакции
  smile 


gcc,  у вас InnoDB или MyISAM ?

Если InnoDB - внешние ключи для этого не подойдут ? так что база сама удаляла из одной из таблиц.


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
Akina
Дата 19.11.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



sir_nuf_nuf, у него, как я понимаю, вообще таблицы не связаны. Какое уж тут каскадное удаление...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.