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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помгите починить запрос, ...большой... 
V
    Опции темы
Astraller
Дата 20.12.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.8.2007
Где: $Украина[Кры м]->Феодосия

Репутация: нет
Всего: 5



Моск вскипел. Помогите.
Код

UPDATE (
 goods g0
,  goods g1
,  goods g2
,  goods g3
,  goods g4
,  goods g5
,  goods g6
,  goods g7
,  goods g8
,  goods g9
,  goods g10
,  goods g11
,  goods g12
,  goods g13
,  goods g14
,  goods g15
,  goods g16
,  goods g17
,  goods g18
,  goods g19
,  goods g20
,  goods g21
,  goods g22
,  goods g23
,  goods g24
,  goods g25
,  goods g26
,  goods g27
,  goods g28
,  goods g29
,  goods g30
,  goods g31
,  goods g32
,  goods g33
,  goods g34
,  goods g35
,  goods g36
,  goods g37
,  goods g38
,  goods g39
,  goods g40
,  goods g41
,  goods g42
,  goods g43
,  goods g44
,  goods g45
,  goods g46
,  goods g47
,  goods g48
,  goods g49
,  goods g50
,  goods g51
,  goods g52
,  goods g53
,  goods g54
,  goods g55
,  goods g56
,  goods g57
,  goods g58
,  goods g59
,  goods g60
,  goods g61
,  goods g62
,  goods g63
,  goods g64
,  goods g65
,  goods g66
,  goods g67
,  goods g68
,  goods g69
,  goods g70
,  goods g71
,  goods g72
,  goods g73
,  goods g74
,  goods g75
,  goods g76
,  goods g77
,  goods g78
,  goods g79
,  goods g80
,  goods g81
,  goods g82
,  goods g83
,  goods g84
,  goods g85
,  goods g86
) SET (
 g0.quantity = (g0.quantity - 1)
,  g1.quantity = (g1.quantity - 1)
,  g2.quantity = (g2.quantity - 1)
,  g3.quantity = (g3.quantity - 1)
,  g4.quantity = (g4.quantity - 1)
,  g5.quantity = (g5.quantity - 1)
,  g6.quantity = (g6.quantity - 1)
,  g7.quantity = (g7.quantity - 1)
,  g8.quantity = (g8.quantity - 1)
,  g9.quantity = (g9.quantity - 1)
,  g10.quantity = (g10.quantity - 1)
,  g11.quantity = (g11.quantity - 1)
,  g12.quantity = (g12.quantity - 1)
,  g13.quantity = (g13.quantity - 1)
,  g14.quantity = (g14.quantity - 1)
,  g15.quantity = (g15.quantity - 1)
,  g16.quantity = (g16.quantity - 1)
,  g17.quantity = (g17.quantity - 1)
,  g18.quantity = (g18.quantity - 1)
,  g19.quantity = (g19.quantity - 1)
,  g20.quantity = (g20.quantity - 1)
,  g21.quantity = (g21.quantity - 1)
,  g22.quantity = (g22.quantity - 1)
,  g23.quantity = (g23.quantity - 1)
,  g24.quantity = (g24.quantity - 1)
,  g25.quantity = (g25.quantity - 1)
,  g26.quantity = (g26.quantity - 1)
,  g27.quantity = (g27.quantity - 1)
,  g28.quantity = (g28.quantity - 1)
,  g29.quantity = (g29.quantity - 1)
,  g30.quantity = (g30.quantity - 1)
,  g31.quantity = (g31.quantity - 1)
,  g32.quantity = (g32.quantity - 1)
,  g33.quantity = (g33.quantity - 1)
,  g34.quantity = (g34.quantity - 1)
,  g35.quantity = (g35.quantity - 1)
,  g36.quantity = (g36.quantity - 1)
,  g37.quantity = (g37.quantity - 1)
,  g38.quantity = (g38.quantity - 1)
,  g39.quantity = (g39.quantity - 1)
,  g40.quantity = (g40.quantity - 1)
,  g41.quantity = (g41.quantity - 1)
,  g42.quantity = (g42.quantity - 1)
,  g43.quantity = (g43.quantity - 1)
,  g44.quantity = (g44.quantity - 1)
,  g45.quantity = (g45.quantity - 1)
,  g46.quantity = (g46.quantity - 1)
,  g47.quantity = (g47.quantity - 1)
,  g48.quantity = (g48.quantity - 1)
,  g49.quantity = (g49.quantity - 1)
,  g50.quantity = (g50.quantity - 1)
,  g51.quantity = (g51.quantity - 1)
,  g52.quantity = (g52.quantity - 1)
,  g53.quantity = (g53.quantity - 1)
,  g54.quantity = (g54.quantity - 1)
,  g55.quantity = (g55.quantity - 1)
,  g56.quantity = (g56.quantity - 1)
,  g57.quantity = (g57.quantity - 1)
,  g58.quantity = (g58.quantity - 1)
,  g59.quantity = (g59.quantity - 1)
,  g60.quantity = (g60.quantity - 1)
,  g61.quantity = (g61.quantity - 1)
,  g62.quantity = (g62.quantity - 1)
,  g63.quantity = (g63.quantity - 1)
,  g64.quantity = (g64.quantity - 1)
,  g65.quantity = (g65.quantity - 1)
,  g66.quantity = (g66.quantity - 1)
,  g67.quantity = (g67.quantity - 1)
,  g68.quantity = (g68.quantity - 1)
,  g69.quantity = (g69.quantity - 1)
,  g70.quantity = (g70.quantity - 1)
,  g71.quantity = (g71.quantity - 1)
,  g72.quantity = (g72.quantity - 1)
,  g73.quantity = (g73.quantity - 1)
,  g74.quantity = (g74.quantity - 1)
,  g75.quantity = (g75.quantity - 1)
,  g76.quantity = (g76.quantity - 1)
,  g77.quantity = (g77.quantity - 1)
,  g78.quantity = (g78.quantity - 1)
,  g79.quantity = (g79.quantity - 1)
,  g80.quantity = (g80.quantity - 1)
,  g81.quantity = (g81.quantity - 1)
,  g82.quantity = (g82.quantity - 1)
,  g83.quantity = (g83.quantity - 1)
,  g84.quantity = (g84.quantity - 1)
,  g85.quantity = (g85.quantity - 1)
,  g86.quantity = (g86.quantity - 1)
) WHERE (
 g0.id = 231
 AND  g1.id = 2347
 AND  g2.id = 376
 AND  g3.id = 379
 AND  g4.id = 551
 AND  g5.id = 542
 AND  g6.id = 2477
 AND  g7.id = 2479
 AND  g8.id = 869
 AND  g9.id = 235
 AND  g10.id = 1679
 AND  g11.id = 2484
 AND  g12.id = 794
 AND  g13.id = 2476
 AND  g14.id = 2299
 AND  g15.id = 2387
 AND  g16.id = 342
 AND  g17.id = 380
 AND  g18.id = 400
 AND  g19.id = 464
 AND  g20.id = 540
 AND  g21.id = 2460
 AND  g22.id = 2480
 AND  g23.id = 2499
 AND  g24.id = 791
 AND  g25.id = 825
 AND  g26.id = 844
 AND  g27.id = 866
 AND  g28.id = 934
 AND  g29.id = 1627
 AND  g30.id = 1711
 AND  g31.id = 2609
 AND  g32.id = 178
 AND  g33.id = 368
 AND  g34.id = 2579
 AND  g35.id = 336
 AND  g36.id = 340
 AND  g37.id = 2411
 AND  g38.id = 461
 AND  g39.id = 2501
 AND  g40.id = 2374
 AND  g41.id = 2482
 AND  g42.id = 758
 AND  g43.id = 2478
 AND  g44.id = 846
 AND  g45.id = 2419
 AND  g46.id = 341
 AND  g47.id = 371
 AND  g48.id = 391
 AND  g49.id = 403
 AND  g50.id = 539
 AND  g51.id = 558
 AND  g52.id = 772
 AND  g53.id = 798
 AND  g54.id = 801
 AND  g55.id = 818
 AND  g56.id = 822
 AND  g57.id = 843
 AND  g58.id = 863
 AND  g59.id = 2300
 AND  g60.id = 1681
 AND  g61.id = 1625
 AND  g62.id = 771
 AND  g63.id = 410
 AND  g64.id = 520
 AND  g65.id = 2459
 AND  g66.id = 2421
 AND  g67.id = 858
 AND  g68.id = 549
 AND  g69.id = 552
 AND  g70.id = 2589
 AND  g71.id = 409
 AND  g72.id = 480
 AND  g73.id = 675
 AND  g74.id = 2607
 AND  g75.id = 592
 AND  g76.id = 622
 AND  g77.id = 805
 AND  g78.id = 458
 AND  g79.id = 2487
 AND  g80.id = 532
 AND  g81.id = 2586
 AND  g82.id = 699
 AND  g83.id = 701
 AND  g84.id = 703
 AND  g85.id = 481
 AND  g86.id = 700
)

И сама ошибка:
Цитата

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 '( g0.quantity = (g0.quantity - 1) , g1.quantity = (g1.quantity - 1) , g2.quant' at line 90


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


--------------------
A.S.T.R.A.L.L.E.R.: Artificial Synthetic Technician Responsible for Assassination, Logical Learning and Efficient Repair
PM MAIL WWW ICQ   Вверх
skyboy
Дата 20.12.2007, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



синтаксис UPDATE
зачем после SET открываешь скобки? с insert'ом перепутал?
PM MAIL   Вверх
Astraller
Дата 20.12.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.8.2007
Где: $Украина[Кры м]->Феодосия

Репутация: нет
Всего: 5



skyboy, сори, я наверно туп, но посмотрев спецификацию все равно не вижу где ошибся. Помогите.

Скобки поставил уже в процессе отладки. Без них ситуация та же.


--------------------
A.S.T.R.A.L.L.E.R.: Artificial Synthetic Technician Responsible for Assassination, Logical Learning and Efficient Repair
PM MAIL WWW ICQ   Вверх
skyboy
Дата 20.12.2007, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



ты мне другое скажи: зачем запихнул в один update обновление кучи таблиц, не связанных между собой? почему не множество UPDATE'ов, обернутых в одну транзакцию?
по отдельности запросы выполняются?
вот такое, например:
Код

UPDATE goods g0 SET g0.quantity = (g0.quantity - 1)  WHERE g0.id = 231
 выполняется нормально?

Добавлено через 19 секунд

M
skyboy
ошибка явно в запросе. едем в раздел MySQL

PM MAIL   Вверх
Astraller
Дата 20.12.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.8.2007
Где: $Украина[Кры м]->Феодосия

Репутация: нет
Всего: 5



skyboy, такой запрос выполняется вполне. Все запросы, к стати, к одной таблице. smile


--------------------
A.S.T.R.A.L.L.E.R.: Artificial Synthetic Technician Responsible for Assassination, Logical Learning and Efficient Repair
PM MAIL WWW ICQ   Вверх
skyboy
Дата 20.12.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



черт smile что-то я пропустил в этой жизни.
а что, если так:
Код

UPDATE `goods`
SET quantity = quantity - 1
WHERE id in (2347,376,379,551,...)
?
впрочем, слишком большой список в "in" сигнализирует о вероятно неверном подходе к структуре. 
или к интерфейсу.
зачем такой большой список? это то, что человек навыбирал "вручную" или просто определенная группа логически связанных между собой элементов?
PM MAIL   Вверх
Astraller
Дата 20.12.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.8.2007
Где: $Украина[Кры м]->Феодосия

Репутация: нет
Всего: 5



skyboy, 
Цитата

а что, если так:

Работает  smile 

Ага, именно то что человек навыбирал вручную smile

PS Проблему то я для себя решил - использовал просто много UPDATE в одной сессии. Но почему указанный выше метод не работает мне интересно smile

Это сообщение отредактировал(а) Astraller - 20.12.2007, 13:16


--------------------
A.S.T.R.A.L.L.E.R.: Artificial Synthetic Technician Responsible for Assassination, Logical Learning and Efficient Repair
PM MAIL WWW ICQ   Вверх
Akina
Дата 20.12.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Astraller @  20.12.2007,  13:55 Найти цитируемый пост)
Все запросы, к стати, к одной таблице.

Даже если в таблице всего 86 записей, несчастный сервер пытается их перемножить, получая для отбора монстра с 86^86 (~2.3*10^166) записей - еще бы он не ругался...


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

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.8.2007
Где: $Украина[Кры м]->Феодосия

Репутация: нет
Всего: 5



Akina, хм... а зачем ему их перемножать если не секрет? smile 
Причем я проверил - процесс mysql не сильно прыгает по ресурсоёмкости при работе скрипта.


--------------------
A.S.T.R.A.L.L.E.R.: Artificial Synthetic Technician Responsible for Assassination, Logical Learning and Efficient Repair
PM MAIL WWW ICQ   Вверх
Feldmarschall
Дата 20.12.2007, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Astraller, попробуй сделать селект по такому же принципу.
и выведи полученные строки.

сразу увидишь, что он умножает
PM   Вверх
skyboy
Дата 20.12.2007, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(Astraller @  20.12.2007,  12:17 Найти цитируемый пост)
а зачем ему их перемножать если не секрет?

потому что неявный JOIN без указания условия связываний даст декартово произведение всех записей всех таблиц.
впрочем, благодаря условиям в where, как мне кажется, происходит join уже после результатов выборки одной строки для каждого псевдонима. 
но в любом случае, join хоть и может дать только одну строку, но будет куча полей, что ни к чему хорошему не приведет.
впрочем, лучше проверить при помощи explain(заменить "update" на "select *").
а ругается не на количество записей/нехватку памяти, а на несоответствие правилам синтаксиса SQL.

Добавлено через 1 минуту и 18 секунд
Цитата(Feldmarschall @  20.12.2007,  12:30 Найти цитируемый пост)
Astraller, попробуй сделать селект по такому же принципу.и выведи полученные строки.

у него же where по значению(видимо) первичного ключа. потому как для каждого псевдонима будет только одна строка. потому даже если выбираются все строки для каждого алиаса, выведется все равно только одна строка. надо смотреть результат explain.
PM MAIL   Вверх
Astraller
Дата 20.12.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.8.2007
Где: $Украина[Кры м]->Феодосия

Репутация: нет
Всего: 5



Переварил. Всем спасибо smile

PS Ушел учить мат часть.  smile 


--------------------
A.S.T.R.A.L.L.E.R.: Artificial Synthetic Technician Responsible for Assassination, Logical Learning and Efficient Repair
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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