SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 28.06.2009 20:59:54

C0nstantin
Участник
Зарегистрирован: 28.06.2009
Сообщений: 2

Помогите составить запрос или несколько

Здравствуйте, у меня возникла следующая задача и я затрудняюсь корректно ее решить, прошу мне помочь

Задача
существует таблица
|  id  |  name  |  type  |  group  |
--------------------------------------
|  1   |  jon     | type1 |    0      |
|  2   |  smit    | type2 |    0      |
|  3   |  jon     | type2 |    0      |
|  4   |  pol     | type1 |    0      |
|  5   |  pol     | type1 |    0      |
|  6   |  smit   | type1 |    0      |
|  7   |  jon     | type2 |    0      |

нужно получить
|  id  |  name  |  type  |  group  |
--------------------------------------
|  1   |  jon     | type1 |    1      |
|  2   |  smit    | type2 |    2      |
|  3   |  jon     | type2 |    3      |
|  4   |  pol     | type1 |    4      |
|  5   |  pol     | type1 |    4      |
|  6   |  smit   | type1 |    5      |
|  7   |  jon     | type2 |    3      |

т.е задать значение group так что если name и type совпадают то значение группы одинаковое
в таблице около 15000 записей, как сделать так чтобы это все быстро выполнялось

Неактивен

 

#2 29.06.2009 11:07:30

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Помогите составить запрос или несколько

Кажется, лучше всего делать точечные запросы курсором. Впрочем, какой-то большой запрос может
решить эту проблему «в лоб» (возможно, не очень оптимально)

[aquatica] root test > select * from ibl;
+------+------+------+------+
| id   | name | type | grp  |
+------+------+------+------+
|    1 | jon  | t1   |    0 |
|    4 | smit | t1   |    0 |
|    2 | jon  | t2   |    0 |
|    3 | jon  | t2   |    0 |
|    5 | smit | t2   |    0 |
|    6 | smit | t1   |    0 |
|    7 | jon  | t1   |    0 |
+------+------+------+------+
7 rows in set (0,00 sec)

[aquatica] root test > select @a := 0; update ibl join (select name, type, @a := @a + 1 as id from (select name, type from ibl group by 1, 2) t) tt using(name,type) set ibl.grp = tt.id;
+---------+
| @a := 0 |
+---------+
|       0 |
+---------+
1 row in set (0,00 sec)

Query OK, 7 rows affected (0,00 sec)
Rows matched: 7  Changed: 7  Warnings: 0

[aquatica] root test > select * from ibl;
+------+------+------+------+
| id   | name | type | grp  |
+------+------+------+------+
|    1 | jon  | t1   |    1 |
|    4 | smit | t1   |    3 |
|    2 | jon  | t2   |    2 |
|    3 | jon  | t2   |    2 |
|    5 | smit | t2   |    4 |
|    6 | smit | t1   |    3 |
|    7 | jon  | t1   |    1 |
+------+------+------+------+
7 rows in set (0,00 sec)

Неактивен

 

#3 29.06.2009 22:23:07

C0nstantin
Участник
Зарегистрирован: 28.06.2009
Сообщений: 2

Re: Помогите составить запрос или несколько

Спасибо, да такого запроса сам бы вряд ли догадался

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson