Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UPDATE и GROUP BY / 14 сообщений из 14, страница 1 из 1
07.10.2009, 20:03:37
    #36238427
minton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE и GROUP BY
Как правильно составить запрос такого типа?

Код: plaintext
1.
UPDATE spr,prd SET spr.analiz_abc_ves=sum(prd.sum_otp)
WHERE spr.ukod=prd.ukod GROUP BY prd.ukod
...
Рейтинг: 0 / 0
07.10.2009, 21:05:11
    #36238497
Simpliest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE и GROUP BY
Никак.

Зачем тебе GROUP BY при апдейте?
...
Рейтинг: 0 / 0
07.10.2009, 21:12:22
    #36238510
minton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE и GROUP BY
мне нужно результат
Код: plaintext
sum(prd.sum_otp) GROUP BY prd.ukod
присвоить колонке
Код: plaintext
spr.analiz_abc_ves

могу это сделать через временную таблицу, но может как-то одним запросом можно?
...
Рейтинг: 0 / 0
07.10.2009, 21:27:40
    #36238525
Simpliest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE и GROUP BY
minton,

У UPDATE нет GROUP BY
так что только через подзапрос

примерно так
Код: plaintext
UPDATE table SET p= (SELECT SUM(p) FROM table WHERE n= 1  GROUP BY n)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
05.11.2013, 08:01:15
    #38452503
naas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE и GROUP BY
Почему не работает?
Код: sql
1.
2.
3.
4.
5.
6.
update phpbb3_users
	set user_posts=
		(select count(*)
		from phpbb3_posts
		where phpbb3_users.user_id=phpbb3_posts.poster_id
		group by poster_id)
...
Рейтинг: 0 / 0
05.11.2013, 08:12:15
    #38452509
UPDATE и GROUP BY
naas,

Молча не работает или выдает какую-то ошибку?
Но, первое что бросается в глаза - таблица используется дважды, но алиасы не назначены. На месте сервера я бы растерялся и не знал бы, какие поля из какой версии таблицы брать.
И второе. Может память мне изменяет, но почему-то помнилось, что нельзя использовать в качестве источника данных обновляемую таблицу.
...
Рейтинг: 0 / 0
05.11.2013, 08:18:25
    #38452512
UPDATE и GROUP BY
Добрый Э - Эх,

упс, плохо посмотрел -таблицы разные :)
...
Рейтинг: 0 / 0
05.11.2013, 08:20:21
    #38452513
naas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE и GROUP BY
Ошибки нет, но модифицирует 0 строк.
Таблица вроде как дважды не используется: в where связь между обновляемой таблицей и таблицей с информацией.
Задача: корректно заполнить поле "количество постов" (phpbb3_users.user_posts), в соответствие с реальным их количеством (count(*) from phpbb3_posts group by poster_id)
...
Рейтинг: 0 / 0
05.11.2013, 09:03:31
    #38452521
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE и GROUP BY
naasТаблица вроде как дважды не используетсяИспользуется. Потому что группировка. Для апдейта должна быть второй раз открыта негруппированная версия.

Перепиши на двутабличный апдейт с подзапросом.
...
Рейтинг: 0 / 0
05.11.2013, 11:46:21
    #38452713
naas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE и GROUP BY
может что-то не так понял, но результат тот же...
Код: sql
1.
2.
3.
4.
5.
6.
7.
update phpbb3_users, phpbb3_posts p1
	set user_posts=
		(select count(*)
		from phpbb3_posts p2
		where phpbb3_users.user_id=p2.poster_id
		group by poster_id)
	where phpbb3_users.user_id=p1.poster_id
...
Рейтинг: 0 / 0
05.11.2013, 12:02:11
    #38452744
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE и GROUP BY
не так, не так... имелось в виду

Код: sql
1.
2.
3.
update table1, (select ... from table2) subquery
set table1... = subquery...
where table1... = subquery...
...
Рейтинг: 0 / 0
05.11.2013, 15:38:12
    #38453200
naas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE и GROUP BY
Не знал, что тут так можно, но результат по прежнему 0. Может опять что-то не так понял? Подзапрос работает корректно - выдает ид и количество.
Код: sql
1.
2.
3.
update phpbb3_users, (select count(*) cnt, poster_id from phpbb3_posts group by poster_id) post_cnt
	set phpbb3_users.user_posts=post_cnt.cnt
	where phpbb3_users.user_id=post_cnt.poster_id
...
Рейтинг: 0 / 0
05.11.2013, 16:27:08
    #38453316
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE и GROUP BY
naasНе знал, что тут так можно
Ну маны вообще полезно почитывать, там много чего есть разного...

naasрезультат по прежнему 0
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
mysql> create table phpbb3_users(user_posts int,user_id int);
Query OK, 0 rows affected (0.28 sec)

mysql> insert into phpbb3_users(user_id) select 1 union select 2 union select 3;
Query OK, 3 rows affected (0.11 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into phpbb3_users(user_id,user_posts) select 4,2;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from phpbb3_users;
+------------+---------+
| user_posts | user_id |
+------------+---------+
|       NULL |       1 |
|       NULL |       2 |
|       NULL |       3 |
|          2 |       4 |
+------------+---------+
4 rows in set (0.00 sec)

mysql> create table phpbb3_posts(poster_id int);
Query OK, 0 rows affected (0.34 sec)

mysql> insert into phpbb3_posts(poster_id) select 1 union all select 2 union all select 2 union all select 3 union all select 3 union all select 3 union all sel
ect 4 union all select 4 union all select 4 union all select 4;
Query OK, 10 rows affected (0.03 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> select * from phpbb3_posts;
+-----------+
| poster_id |
+-----------+
|         1 |
|         2 |
|         2 |
|         3 |
|         3 |
|         3 |
|         4 |
|         4 |
|         4 |
|         4 |
+-----------+
10 rows in set (0.00 sec)

mysql> update phpbb3_users
    -> ,      (
    ->        select count(*) cnt
    -> ,             poster_id
    ->        from phpbb3_posts
    ->        group by poster_id
    ->        ) post_cnt
    -> set phpbb3_users.user_posts=post_cnt.cnt
    -> where phpbb3_users.user_id=post_cnt.poster_id;
Query OK, 4 rows affected (0.09 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> select * from phpbb3_users;
+------------+---------+
| user_posts | user_id |
+------------+---------+
|          1 |       1 |
|          2 |       2 |
|          3 |       3 |
|          4 |       4 |
+------------+---------+
4 rows in set (0.00 sec)

mysql>

Выпрямляй руки.
...
Рейтинг: 0 / 0
06.11.2013, 08:52:55
    #38453947
naas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE и GROUP BY
м-да... руки тут не при чем оказались. Правильный ответ: нечего было править!
MySQL, в отличие от других систем, не изменяет данные на такие же.
Скорее всего у меня отработал еще первый запрос, а дальше сколько не бейся будет 0 изменений.
Всем спасибо!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UPDATE и GROUP BY / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]