Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

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

Вот мои запросы:
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, 19:01   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,412
Репутация: 5596
По умолчанию

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

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

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

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

icq: 303-206-418
skype: ad-soft.info
По умолчанию

Ну почему, вот первы три просто просятся в один
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, 22:08   #5
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,759
Репутация: 6592
По умолчанию

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

Чуть-чуть лучше
Код:

DELETE FROM product WHERE store in (0,1) OR `recommended-im`=0

Но все равно сомнительно, что сильно быстрей 3-х отдельных удалений
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

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

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

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

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

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

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

Цитата:
Сообщение от 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, 14:53   #10
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,412
Репутация: 5596
По умолчанию

а если так:

Код:

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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединить несколько dxf в один rustam-sh Фриланс 1 04.12.2015 17: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 19:13


07:59.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru