Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2017, 17:16   #1
Tagir93
Пользователь
 
Регистрация: 06.02.2017
Сообщений: 31
По умолчанию Как объединить несколько запросов в один?

Добрый день!
Подскажите пожалуйста как объединить несколько запросов в один.

Вот мои запросы:
1. DELETE FROM `product` WHERE `recommended-im`=0
2. DELETE FROM product WHERE store=0
3. DELETE FROM product WHERE store=1
4. UPDATE `product` SET `store` = REPLACE( `store` , 'более 40', '40');
5.UPDATE Group_shini_items, product SET Group_shini_items._balance = product.store
WHERE Group_shini_items._cae = product.cae;
6. UPDATE Group_shini_items, product SET Group_shini_items._price = product.`recommended-im`
WHERE Group_shini_items._cae = product.cae;
Tagir93 вне форума Ответить с цитированием
Старый 06.02.2017, 18:01   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

delete и update в один запрос объединить невозможно.
update'ы разных таблиц в один запрос объединить тоже весьма проблематично.

а зачем Вам объединять несколько запросов в один?
В этом нет смысла.
Даже выигрыш по скорости будет весьма сомнительный (из за использования операции ИЛИ (OR) - это плохо влияет на скорость выполнения запроса)
я же уже не говорю про логику.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.02.2017, 18:32   #3
Tagir93
Пользователь
 
Регистрация: 06.02.2017
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
delete и update в один запрос объединить невозможно.
update'ы разных таблиц в один запрос объединить тоже весьма проблематично.

а зачем Вам объединять несколько запросов в один?
В этом нет смысла.
Даже выигрыш по скорости будет весьма сомнительный (из за использования операции ИЛИ (OR) - это плохо влияет на скорость выполнения запроса)
я же уже не говорю про логику.
Ясно, спасибо за ответ! Теперь мне все ясно, буду их выполнять поочередно. Не могу только понять как сделать так чтобы запросы UPDATE отработать все сразу, мне приходиться их вставлять поочередно. Первых четыре запроса выполняются без проблем, я их вставляю непосредственно в саму базу данных, т.к. скрипт еще не написал. А вот 4 и 5 пункт если их вставить то появляется ошибка что то там с сервером.
Tagir93 вне форума Ответить с цитированием
Старый 06.02.2017, 20:29   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

Ну почему, вот первы три просто просятся в один
PHP код:
1. DELETE FROM `productWHERE `recommended-im`=0
2. DELETE FROM product WHERE store
=0
3. DELETE FROM product WHERE store
=
в
PHP код:
DELETE FROM product WHERE store=OR store=OR `recommended-im`=
ADSoft вне форума Ответить с цитированием
Старый 06.02.2017, 21:08   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
А вот 4 и 5 пункт если их вставить то появляется ошибка что то там с сервером
А что-то там с сервером это как? Покажи сообщение. И UPDATE c несколькими таблицами не для всех версий мускула

Чуть-чуть лучше
Код:
DELETE FROM product WHERE store in (0,1) OR `recommended-im`=0
Но все равно сомнительно, что сильно быстрей 3-х отдельных удалений
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 06.02.2017 в 21:12.
Аватар вне форума Ответить с цитированием
Старый 07.02.2017, 01:45   #6
Tagir93
Пользователь
 
Регистрация: 06.02.2017
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А что-то там с сервером это как? Покажи сообщение.
#2013 - Lost connection to MySQL server during query
Tagir93 вне форума Ответить с цитированием
Старый 07.02.2017, 07:57   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Могу только предположить, что слишком много записей обновляется в одном запросе и тайм-аут мал для этого
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.02.2017, 11:00   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
что слишком много записей обновляется в одном запросе и тайм-аут мал для этого
согласен, присоединяюсь.

Tagir93,
проверьте, что в таблицах
в таблице Group_shini_items есть индекс по полю _cae
в таблице product есть индекс по полю cae

отсутствие индексов может привести к очень сильному падению производительности, поэтому запрос и выполняется очень долго.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.02.2017, 13:09   #9
Tagir93
Пользователь
 
Регистрация: 06.02.2017
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
согласен, присоединяюсь.

Tagir93,
проверьте, что в таблицах
в таблице Group_shini_items есть индекс по полю _cae
в таблице product есть индекс по полю cae

отсутствие индексов может привести к очень сильному падению производительности, поэтому запрос и выполняется очень долго.
Добавляю индекс в таблицу Group_shini_items по полю _cae после проверки :
SELECT COUNT( * ) IndexIsThere
FROM INFORMATION_SCHEMA.STATISTICS
WHERE table_schema = 'shinacar'
AND table_name = 'Group_shini_item'
AND index_name = '_cae'

Показывает сообщение:
IndexIsThere
0
Tagir93 вне форума Ответить с цитированием
Старый 07.02.2017, 13:53   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

а если так:

Код:
SELECT COUNT( * ) IndexIsThere
FROM INFORMATION_SCHEMA.STATISTICS
WHERE table_schema = 'shinacar'
AND table_name = 'Group_shini_item'
and column_name='_cae'
ну, похоже нет индекса.
нужно добавить.

p.s. а зачем этот хардкор с запросом из информационной схемы?
разве посмотреть в phpMyAdmin не проще?
и там же и добавить можно, если индекса нет.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединить несколько dxf в один rustam-sh Фриланс 1 04.12.2015 16:35
winsock http несколько запросов за один коннект Biohazard Работа с сетью в Delphi 0 07.10.2014 17:16
Как правильно объединить несколько одинаковых стилей CSS в один файл? -=ButCheR=- HTML и CSS 1 30.10.2010 08:21
Как объединить несколько MIDlet-ов в один MIDlet? RamaR Общие вопросы по Java, Java SE, Kotlin 2 10.06.2010 22:15
Слить-объединить несколько файлов в один SLP Microsoft Office Excel 2 19.11.2008 18:13