SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 11.03.2010 18:30:34

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Помогите разобраться с запросом

Ребята, снова прошу вашей помощи...

Есть таблица:


mysql> select * from phrases;
+------+---------+----------+
| id   | word_id | order_id |
+------+---------+----------+
|    1 |       1 |        1 |
|    1 |       2 |        2 |
|    2 |       1 |        1 |
|    3 |       2 |        1 |
|    4 |       1 |        1 |
|    4 |       7 |        3 |
|    4 |       6 |        2 |
+------+---------+----------+
 
Первая часть запроса:

mysql> select phrases.* from phrases,(select id from phrases where word_id=1) as q where phrases.id=q.id order by id, order_id;
+------+---------+----------+
| id   | word_id | order_id |
+------+---------+----------+
|    1 |       1 |        1 |
|    1 |       2 |        2 |
|    2 |       1 |        1 |
|    4 |       1 |        1 |
|    4 |       6 |        2 |
|    4 |       7 |        3 |
+------+---------+----------+
 
Второй запрос (включает в себя первый):

mysql> select group_concat(word_id) from (select phrases.* from phrases,(select id from phrases where word_id=1) as q where phrases.id=q.id order by id, order_id) as e group by id;
+-----------------------+
| group_concat(word_id) |
+-----------------------+
| 1,2                   |
| 1                     |
| 6,7,1                 |
+-----------------------+
 
Вопрос: почему в последней таблице строка три содержит 6,7,1? Я наивно ожидаю 1,6,7...
Создал отдельную таблицу в базе, которая представляет собой приведенную мной выше исходную таблицу, поля назвал col1, col2, col3. Тогда следующий запрос выдает ожидаемый мной результат:

mysql> select group_concat(col2) from (select * from test order by col1, col3) as e group by col1;
+--------------------+
| group_concat(col2) |
+--------------------+
| 1,2                |
| 1                  |
| 1,6,7              |
+--------------------+
 
Положительно не понимаю в чем тут разница...

---
Версия MySQL: 5.0.45-community-nt.

Отредактированно FiMko (11.03.2010 18:39:53)

Неактивен

 

#2 11.03.2010 18:50:07

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

Re: Помогите разобраться с запросом

GROUP_CONCAT может принимать дополнительным аргументом порядок сортировки:
http://dev.mysql.com/doc/refman/5.1/en/ … oup-concat

Без явного указания сортировки порядок выдачи результатов даже просто из таблицы
не определен (хотя обычно он совпадает с последовательностью хранения строк на
диске).

Неактивен

 

#3 11.03.2010 19:06:58

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Помогите разобраться с запросом

paulus написал:

GROUP_CONCAT может принимать дополнительным аргументом порядок сортировки:
http://dev.mysql.com/doc/refman/5.1/en/ … oup-concat

Без явного указания сортировки порядок выдачи результатов даже просто из таблицы
не определен (хотя обычно он совпадает с последовательностью хранения строк на
диске).

Да, единственная мысль которая посещала - это то, что выдача соответствует порядку хранения. Я посмотрел прототип GROUP_CONCAT, но так и не понял как приладить ASC/DESC применительно к моему случаю...

---
Что-нибудь вроде этого?:


mysql> select group_concat(word_id order by id, order_id asc) from (select phrases.* from phrases,(select id from phrases where word_id=1) as q where phrases.id=q.id) as e group by id;
 

Отредактированно FiMko (11.03.2010 19:11:07)

Неактивен

 

#4 11.03.2010 19:47:46

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

Re: Помогите разобраться с запросом

order by order_id, потому что по id Вы группируете

Неактивен

 

Board footer

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