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




MySQL.RU - Webboard



Вернуться
5.1.41-3ubuntu12.10 странно себя ведет (Станислав) 05/03/2011 - 15:27:26
      Re: 5.1.41-3ubuntu12.10 странно себя ведет (Станислав) 05/03/2011 - 15:34:47
      Re: 5.1.41-3ubuntu12.10 странно себя ведет (Akina) 05/03/2011 - 15:42:10
      Re: 5.1.41-3ubuntu12.10 странно себя ведет (Станислав) 05/03/2011 - 16:02:56
      Re: 5.1.41-3ubuntu12.10 странно себя ведет (Akina) 05/03/2011 - 16:08:09

> Original message text:
> From: Станислав - 05/03/2011 - 15:27:26
> Subject:5.1.41-3ubuntu12.10 странно себя ведет
> -----------------
> Всем привет.
>
> Столкнулся с проблемой при разработке одного сайта.
> Специально сделал тестовый набор данных и запросов чтобы проверить. И вот результат:
>
> ---
> drop table if exists test_data;
>
> create table test_data(
> id int not null,
> date date not null default '0000-00-00',
> primary key(id),
> index d(date));
>
> insert into test_data values(1, '2010-03-05');
> insert into test_data values(2, '2010-03-05');
> insert into test_data values(3, '2010-03-02');
> ---
>
> Далее делаем тестовые запросы:
>
> mysql> select * from test_data order by date;
> +----+------------+
> | id | date |
> +----+------------+
> | 3 | 2010-03-02 |
> | 1 | 2010-03-05 |
> | 2 | 2010-03-05 |
> +----+------------+
> 3 rows in set (0.00 sec)
>
> mysql> select * from test_data order by date limit 0,1;
> +----+------------+
> | id | date |
> +----+------------+
> | 3 | 2010-03-02 |
> +----+------------+
> 1 row in set (0.00 sec)
>
> mysql> select * from test_data order by date limit 1,1;
> +----+------------+
> | id | date |
> +----+------------+
> | 1 | 2010-03-05 |
> +----+------------+
> 1 row in set (0.00 sec)
>
> Пока все хорошо и предсказуемо.
> А теперь повернем сортировку в обратную сторону.
>
> mysql> select * from test_data order by date desc;
> +----+------------+
> | id | date |
> +----+------------+
> | 1 | 2010-03-05 |
> | 2 | 2010-03-05 |
> | 3 | 2010-03-02 |
> +----+------------+
> 3 rows in set (0.00 sec)
>
> mysql> select * from test_data order by date desc limit 0,1;
> +----+------------+
> | id | date |
> +----+------------+
> | 2 | 2010-03-05 |
> +----+------------+
> 1 row in set (0.00 sec)
>
> И вот тут я, честно говоря, ожидал увидеть запись с id = 1.
>
>
> mysql> select * from test_data order by date desc limit 1,1;
> +----+------------+
> | id | date |
> +----+------------+
> | 1 | 2010-03-05 |
> +----+------------+
> 1 row in set (0.00 sec)
>
> А тут хотелось бы запись с id = 2.
>
> Вот и хотел уточнить у знатоков правильно ли я понимаю, что это не совсем корректная работа MySQL сервера? Или может я немного не разрбрался с тонкостями работы limit.
>
> MySQL Server version: 5.1.41-3ubuntu12.10 (Ubuntu)
> Linux 2.6.32-28-generic #55-Ubuntu SMP Mon Jan 10 21:21:01 UTC 2011 i686 GNU/Linux
>
>
>
>


From: Akina - 05/03/2011 - 15:42:10
Subject:5.1.41-3ubuntu12.10 странно себя ведет
-----------------
Вы неверно разобрались.
Если порядок сортировки не может определить взаимное расположение записей в выборки, оно в общем случае случайно. Более того, оно имеет право измениться в двух последовательных запросах, и это будет совершенно законно.



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

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

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



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