PHP форум на ПЫХА.РУ

PHP форум на ПЫХА.РУ

PHP программирование => Базы данных => Тема начата: adw0rd от 28 Июль, 2009, 02:21:24



Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 28 Июль, 2009, 02:21:24
Не возможно обновить данные в таблице, в которой производишь выборку
 
SQL

mysql> UPDATE `categories` SET `size` = (SELECT (`count` / ((max(`count`) - min(`count`)) / 10)) FROM `categories`);
ERROR 1093 (HY000): You can't specify target table 'categories' for update in FROM clause

не в курсе как обойти?)
 
------
 
Второй вариант, без селекта:
SQL

mysql> UPDATE `categories` SET `size` = (`count` / ((max(`count`) - min(`count`)) / 10));
ERROR 1111 (HY000): Invalid USE of GROUP FUNCTION
 

тоже не прокатывает, есть соображения как это тоже обойти?
 
------
 
По отдельности все работает:
 
SQL

mysql> SELECT (`count` / ((max(`count`) - min(`count`)) / 10)) FROM `categories`;
+--------------------------------------------------------+
| (`count` / ((max(`count`) - min(`count`)) / 10))     |
+--------------------------------------------------------+
|                                             3.47826087 |
+--------------------------------------------------------+
1 row IN SET (0.00 sec)
 

mysql> UPDATE `categories` SET `size` = 3.47826087;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 21  Changed: 0  Warnings: 0
 

 


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 28 Июль, 2009, 02:20:47
Так тоже не работает...
 
SQL

UPDATE `categories` AS `c1`
JOIN `categories` AS `c2`
USING(`category_id`)
SET `c1`.`size` = (`c2`.`count` / ((max(`c2`.`count`) - min(`c2`.`count`)) / 10));
 
ERROR 1111 (HY000): Invalid USE of GROUP FUNCTION
 


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 28 Июль, 2009, 02:38:09
Решение:
 
SQL

-- создаем коэффициент деления
SET @percent = (SELECT (max(`count`) - min(`count`)) / 10 FROM `categories`);
 
-- создаем вьюху
CREATE VIEW `categories_view` AS SELECT `category_id`, `count` FROM `categories`;
 
-- жойним таблицу и вьюху, обновляя данные
UPDATE `categories` AS `c`
JOIN `categories_view` AS `cv`
USING(`category_id`)
SET `c`.`size` = `cv`.`count` / @percent;
 
 


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: rider-sx от 28 Июль, 2009, 02:45:55
adw0rd, ты охуенно поговорил так сам с собой ^_^


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 28 Июль, 2009, 02:47:44

adw0rd, ты охуенно поговорил так сам с собой ^_^
на самом деле мы говорили с dics'ом в скайпе, а код я выкладывал сюда, чтобы другим помогло на будущее ;)


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: rider-sx от 28 Июль, 2009, 02:55:42


adw0rd, ты охуенно поговорил так сам с собой ^_^
на самом деле мы говорили с dics'ом в скайпе, а код я выкладывал сюда, чтобы другим помогло на будущее ;)
:DDD Верю )
Спустя 17 секунд добавил
ПыСы 1212


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 28 Июль, 2009, 04:01:13
Продолжение http://adw0rd.ru/2009/mysql-update-error/


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: phpdude от 28 Июль, 2009, 07:07:58
SQL
mysql> UPDATE `categories` SET `size` = (`count` / ((max(`count`) - min(`count`)) / 10));
ERROR 1111 (HY000): Invalid USE of GROUP FUNCTION

не проще ли тут group дописать?)


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 28 Июль, 2009, 12:43:32
phpdude, покажи как


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: phpdude от 28 Июль, 2009, 01:29:20
хз)) я просто ошибку проанализировал)


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 28 Июль, 2009, 01:33:47
phpdude, написано что неправильное так группировать функции... или нечто подобное )


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: phpdude от 28 Июль, 2009, 01:36:51

phpdude, написано что неправильное так группировать функции... или нечто подобное )
попробуй дописать нечто вида
group by null в конце)) может сканает)
Спустя 5 секунд добавил
просто проверить


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 28 Июль, 2009, 01:43:50
mysql> update `categories` set `size` = (`count` / ((max(`count`) - min(`count`)) / 10)) group by null;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right synta
x to use near 'group by null' at line 1
 
mysql> update `categories` set `size` = (`count` / ((max(`count`) - min(`count`)) / 10)) group by rand();
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right synta
x to use near 'group by rand()' at line 1
 
mysql> update `categories` set `size` = (`count` / ((max(`count`) - min(`count`)) / 10)) group by `category_id`;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right synta
x to use near 'group by `category_id`' at line 1


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: phpdude от 28 Июль, 2009, 01:46:55
adw0rd, стрянно )))


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 28 Июль, 2009, 01:55:18
не угадал))


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: Givi от 28 Июль, 2009, 02:55:21
phpdude, честно говоря, хуйню ты какую-то сказал относительно group by %)
Тут ведь по логике нехер группировать, так как группировка - это свойство выборки, а тут запись (обновление).


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: phpdude от 28 Июль, 2009, 03:51:17

phpdude, честно говоря, хуйню ты какую-то сказал относительно group by %)
Тут ведь по логике нехер группировать, так как группировка - это свойство выборки, а тут запись (обновление).
блядь, ну ругается то что не сгруппированы данные, а группировка по нуллу - ничего не дает, зато можгла мускуль "обмануть" :)


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: Givi от 28 Июль, 2009, 04:03:37
phpdude, да тут вероятнее всего себя обманешь, а не мускуль. Вот Эд правильно понял ошибку "Неправильно сгрупированны (то есть. одновременно использованны) функции в запросе".
Спустя 44 секунды добавил
В общем, похеру. Все равно непонятно почему он не может сделать выборку в запросе на обновление.


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: phpdude от 28 Июль, 2009, 04:05:21

phpdude, да тут вероятнее всего себя обманешь, а не мускуль. Вот Эд правильно понял ошибку "Неправильно сгрупированны (то есть. одновременно использованны) функции в запросе".
Спустя 44 секунды добавил
В общем, похеру. Все равно непонятно почему он не может сделать выборку в запросе на обновление.
ну хуй знает, было бы время я бы поковырял, да некогда пока))) сегодня одним запросом пололжил на час бд у людей ....
 
была табличка на 6 000 000 строк.
 
я ее сжойнил без условия с табличкой на 100 000 результатов, и на темпорери тейбл видимо мускуль подвис =)))))))))


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: Givi от 28 Июль, 2009, 04:10:20
о_О ипанутсо.
Я бы чисто для себя ссыкнул бы лезть к БД такого размера неведомо чем (имею ввиду непроверенными запросами). Ты крут )))


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: phpdude от 28 Июль, 2009, 04:14:59

о_О ипанутсо.
Я бы чисто для себя ссыкнул бы лезть к БД такого размера неведомо чем (имею ввиду непроверенными запросами). Ты крут )))
это не размер для меня. я оптимизировал запрос с 20 секунд до 0.20 секунды. вот тут я крут!
Спустя 12 секунд добавил
запрос на сбор статистики


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: NRG от 28 Июль, 2009, 04:16:15
phpdude, да ты ваще ахуенен))))


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: phpdude от 28 Июль, 2009, 04:18:32

phpdude, да ты ваще ахуенен))))
да ты тоже!


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: Sinkler от 28 Июль, 2009, 04:23:22
Ваще охуены на пiха.ру


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: Troy от 28 Июль, 2009, 04:34:36
всё ахуено на пiха.ру


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 28 Июль, 2009, 07:17:31
Я сейчас делаю поиск для одного сайта, там камментов 5 000 000 строк, юзеров 3 000 000 строк, новостей 1 000 000 строк, групп 30 000 строк, и тегов 500 000 строк...


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: phpdude от 28 Июль, 2009, 07:21:47

Я сейчас делаю поиск для одного сайта, там камментов 5 000 000 строк, юзеров 3 000 000 строк, новостей 1 000 000 строк, групп 30 000 строк, и тегов 500 000 строк...
ну ты на сфинксе, а я на чистом мускуле)) знаем мы тебя :))
 
сфинкс сам это все без пизды обработает мну кажется


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: Givi от 28 Июль, 2009, 07:34:35
adw0rd, бля, а юзеры там хоть в 50% активные (в смысле, не "одноразовая" регистрация) ? А то 3 ляма пользователей - это йомана как дохера!
А вот относительно 1 ляма новостей, то тут уже УГ - новости скопипизжены (не вручную ж там лям новостей написали) :)
А нахера аж 30 тыс групп о_О !? Это для меня загадка, бля.
Остальное просто впечатлило :)


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 28 Июль, 2009, 07:37:15
Givi, сайту 9 лет, все это время активно развивался


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 28 Июль, 2009, 07:43:56

adw0rd, бля, а юзеры там хоть в 50% активные (в смысле, не "одноразовая" регистрация) ? А то 3 ляма пользователей - это йомана как дохера!
открытых для просмотра акков - 2 300 000
 
А вот относительно 1 ляма новостей, то тут уже УГ - новости скопипизжены (не вручную ж там лям новостей написали) :)
это соц сеть, может юзера и пиздят.. может и нет, не следил за ними
 
А нахера аж 30 тыс групп о_О !? Это для меня загадка, бля.
посмотри сколько на вконтакте, думаю вопрос отпадет


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: ghost от 30 Июль, 2009, 03:53:06
табла с полями id, f1, f2, всё - int
 
SQL
UPDATE tab1 LEFT JOIN (SELECT * FROM tab1 , (SELECT max(`id`) AS f4, min(`id`) AS f5 FROM tab1) AS t2) AS t3 USING (id) SET tab1.f1 = tab1.f1 + t3.f4

хм. [скл] прокрутку не показывает
update tab1 left join (select * FROM tab1 , (select max(`id`) as f4, min(`id`) as f5 FROM tab1) as t2) as t3 using (id) set tab1.f1 = tab1.f1 + t3.f4


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 30 Июль, 2009, 04:02:57
хм. [скл] прокрутку не показывает
у меня показывает
Спустя 31 секунду добавил
ghost, спасибо, добавлю в избранное, но запрос не буду переписывать сейчас, потом ка-нибудь


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: ghost от 30 Июль, 2009, 04:08:01
ну не факт что такое решение будет оптимальным - тестить надо


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 30 Июль, 2009, 04:23:27
ghost, ясно, мне всеравно надо только раз в сутки вызывать этот запрос :)


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: Givi от 30 Июль, 2009, 04:45:45
У меня тоже не отображается горизонтальная прокрутка на СКЛ-коде в посте Госта.


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: rider-sx от 30 Июль, 2009, 04:49:07
поставь ФФ =))) У меня всек отображается


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 30 Июль, 2009, 04:51:59
Эта? Попробуйте Ctrl+F5


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: Givi от 30 Июль, 2009, 05:47:59
rider-sx, бля... не смешно.
 
adw0rd, хер - все равно не отображает. А стили основного блока совпадают со стилями пыхо-кода ? Потому как пыхо-код у мну постоянно отображается без глюков.


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: ghost от 30 Июль, 2009, 06:29:57
Firefox/3.0.11.
не отображается.


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: rider-sx от 30 Июль, 2009, 06:31:49
3.5.1 все норм =)


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: ghost от 30 Июль, 2009, 06:36:25
в 3.5 своих глюков хватает
Спустя 1 минуту 38 секунд добавил
в 8-м ие тоже
Спустя 1 минуту 3 секунды добавил
а вот в Opera/9.64 всё есть


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 30 Июль, 2009, 06:55:59
Ну короче если надо - делайте скролл, однако можно просто запрос оформить нормально ;)


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: Givi от 30 Июль, 2009, 06:56:12
3.5.1 - хрен в стакане.


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: adw0rd от 30 Июль, 2009, 06:58:09
Givi, к чему это было?
Спустя 32 секунды добавил
давайте я тоже что-нибудь ляпну, гугл - селедка в молоке


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: ghost от 30 Июль, 2009, 09:14:02

Ну короче если надо - делайте скролл, однако можно просто запрос оформить нормально ;)
уел :)


Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку
Отправлено: Givi от 30 Июль, 2009, 09:33:07

Givi, к чему это было?
К этому. Сорри что так кратко написал - как раз выбегал с работы.

3.5.1 все норм =)


PHP форум на ПЫХА.РУ