|
Название: 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 на самом деле мы говорили с dics'ом в скайпе, а код я выкладывал сюда, чтобы другим помогло на будущее ;) Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку Отправлено: rider-sx от 28 Июль, 2009, 02:55:42 :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 попробуй дописать нечто вида 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; Название: 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 блядь, ну ругается то что не сгруппированы данные, а группировка по нуллу - ничего не дает, зато можгла мускуль "обмануть" :) Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку Отправлено: Givi от 28 Июль, 2009, 04:03:37 phpdude, да тут вероятнее всего себя обманешь, а не мускуль. Вот Эд правильно понял ошибку "Неправильно сгрупированны (то есть. одновременно использованны) функции в запросе".
Спустя 44 секунды добавил В общем, похеру. Все равно непонятно почему он не может сделать выборку в запросе на обновление.Название: MySQL: Не возможно обновить данные в таблице, в которой производишь выборку Отправлено: phpdude от 28 Июль, 2009, 04:05:21 ну хуй знает, было бы время я бы поковырял, да некогда пока))) сегодня одним запросом пололжил на час бд у людей .... была табличка на 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 да ты тоже! Название: 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 ну ты на сфинксе, а я на чистом мускуле)) знаем мы тебя :)) сфинкс сам это все без пизды обработает мну кажется Название: 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 открытых для просмотра акков - 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 К этому. Сорри что так кратко написал - как раз выбегал с работы.
|