Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
После UNION меняется порядок строк о_О (Elrion) 17/03/2009 - 20:12:09
      Re: После UNION меняется порядок строк о_О (Diter) 19/03/2009 - 17:06:13

> Original message text:
> From: Elrion - 17/03/2009 - 20:12:09
> Subject:После UNION меняется порядок строк о_О
> -----------------
> Имеется запрос, состоящий из 2х SELECT'ов и объединяющего их UNION'a. Первый запрос, если его выполнить отдельно, возвращает все как нужно, то есть все отсортировано по submid. Второй запрос сам по себе не возвращает ничего. Однако если объединить их UNIONом, Порядок строк почему-то меняется о_О. Т.е. submid не отсортировано, а совершенно хаотично.. 50,49,51,47..
>
> Собственно не могу понять, с чем это связано. Запрос ниже:
>
> (
> SELECT fsbm.id AS submid, fsbm. * , f. * , u.id AS userid, u.firstname, u.lastname, gm.groupid
> FROM mdl_fileupload_submissions fsbm, mdl_fileupload f, mdl_user u, mdl_groups_members gm
> WHERE course =3
> AND fsbm.user_id = u.id
> AND f.id =9
> AND f.id = fsbm.fileupload_id
> AND gm.userid = u.id
> AND timemarked =0
> ORDER BY submid ASC
> )
> UNION
> (
> SELECT fsbm.id AS submid, fsbm. * , f. * , u.id AS userid, u.firstname, u.lastname, gm.groupid
> FROM mdl_fileupload_submissions fsbm, mdl_fileupload f, mdl_user u, mdl_groups_members gm
> WHERE course =3
> AND fsbm.user_id = u.id
> AND f.id =9
> AND f.id = fsbm.fileupload_id
> AND gm.userid = u.id
> AND timemarked <>0
> ORDER BY timemarked DESC
> );
>


From: Diter - 19/03/2009 - 17:06:13
Subject:После UNION меняется порядок строк о_О
-----------------
Команда UNION не меняет порядок строк, а ей вообще пофигу порядок, который был.

However, use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows.
http://dev.mysql.com/doc/refman/5.0/en/union.html

Поэтому выносим ORDER BY за скобки:

(
SELECT fsbm.id AS submid, fsbm. * , f. * , u.id AS userid, u.firstname, u.lastname, gm.groupid
FROM mdl_fileupload_submissions fsbm, mdl_fileupload f, mdl_user u, mdl_groups_members gm
WHERE course =3
AND fsbm.user_id = u.id
AND f.id =9
AND f.id = fsbm.fileupload_id
AND gm.userid = u.id
AND timemarked =0
)
UNION
(
SELECT fsbm.id AS submid, fsbm. * , f. * , u.id AS userid, u.firstname, u.lastname, gm.groupid
FROM mdl_fileupload_submissions fsbm, mdl_fileupload f, mdl_user u, mdl_groups_members gm
WHERE course =3
AND fsbm.user_id = u.id
AND f.id =9
AND f.id = fsbm.fileupload_id
AND gm.userid = u.id
AND timemarked <>0
ORDER BY timemarked DESC
) ORDER BY submid ASC;



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
35182



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |