Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка работает, не так как хочу 
V
    Опции темы
animegirl
  Дата 14.2.2012, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Таблица:

Код

CREATE TABLE IF NOT EXISTS `0` (
   `fid` int(10) unsigned NOT NULL,
   `tid` int(10) unsigned NOT NULL,
   `mid` bigint(20) unsigned NOT NULL,
   `from` varchar(255) collate utf8_unicode_ci NOT NULL,
   `text` longtext collate utf8_unicode_ci NOT NULL,
   `readed` tinyint(1) unsigned NOT NULL,
   `time` int(10) unsigned NOT NULL,
   UNIQUE KEY `mid` (`mid`),
   KEY `fid` (`fid`),
   KEY `tid` (`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `0` (`fid`, `tid`, `mid`, `from`, `text`, `readed`, `time`) VALUES
(1, 2, 354345, '', 'dfgdsgf', 0, 435345),
(1, 2, 121329075128, '', 'xxx', 0, 1329075128),
(2, 1, 121329138885, 'A', 'dadada', 0, 1234567890),
(1, 2, 121329213183, 'B', 'netnetnet', 0, 1234567895),
(3, 1, 456564364356, 'C', 'gbgbgb', 0, 1234567898),
(1, 3, 4326435635465, 'A', 'brbrbr', 0, 1234567896);

  


Запрос:

Код

SELECT * 
FROM `0` 
WHERE fid =1
OR tid =1
GROUP BY fid, tid
ORDER BY time DESC 

  

Цель получить последние послание из чата двух юзеров, все сообщения не нужны. Объединила по fid,tid, выходит две строки, но это не страшно в PHP отсеяла лишнее, проблема в сортировки, не знаю, почему, но запрос походу сначала берёт ПЕРВОЕ значение каждой группы, а потом сортирует результат по времени уже выдернутого, а надо наоборот, чтоб выдёргивал последние, сортируя по группам.


--------------------
Скажи миру - НЯ!
PM   Вверх
Zloxa
Дата 14.2.2012, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(animegirl @  14.2.2012,  15:39 Найти цитируемый пост)
но запрос походу сначала берёт ПЕРВОЕ значение каждой группы

Он берет ЛЮБОЕ значение каждой группы.

Цитата(animegirl @  14.2.2012,  15:39 Найти цитируемый пост)
 получить последние послание

rtfm http://www.sql.ru/forum/actualthread.aspx?tid=687908

Добавлено через 6 минут и 47 секунд
А зачем вам вообще группировка?
Код

SELECT * 
FROM `0` 
WHERE fid =1
OR tid =1
ORDER BY time DESC limit 1


Это сообщение отредактировал(а) Zloxa - 14.2.2012, 15:50


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
animegirl
Дата 14.2.2012, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Мне надо получить только последние сообщение, сообщения маркируются в столбиках от кого и кому. А какие способы вы бы предложили?


--------------------
Скажи миру - НЯ!
PM   Вверх
Данкинг
Дата 14.2.2012, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130





--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Zloxa
Дата 14.2.2012, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Данкинг @  14.2.2012,  16:15 Найти цитируемый пост)
Я нечто подобное спрашивал уже. 

Я думаю - не особо согрешу против истыны, если заявлю, что это самый хитовый вопрос в датабазных темах на форуме.
Цитата(animegirl @  14.2.2012,  15:59 Найти цитируемый пост)
 А какие способы вы бы предложили? 

А какие способы из предложенных мною вы уже рассмотрели?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
animegirl
Дата 14.2.2012, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Цитата(Zloxa @  14.2.2012,  17:51 Найти цитируемый пост)
А какие способы из предложенных мною вы уже рассмотрели?

Я пыталась всё в одну выборку уместить.
Изучала ваш мануал по сылке, заинтересовал вот такой вот запрос, только не могу до конца понять принцип его дейстия, можите объяснить если не сложно?
Код

SELECT usr, SUBSTR(MAX(CONCAT(dt, post)), 1, 19) dt, SUBSTR(MAX(CONCAT(dt, post)), 20) post
FROM posts
GROUP BY usr



--------------------
Скажи миру - НЯ!
PM   Вверх
Данкинг
Дата 14.2.2012, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



Цитата(Zloxa @  14.2.2012,  18:51 Найти цитируемый пост)
то самый хитовый вопрос в датабазных темах на форуме.

Да запрос-то несложный по сути. Ну, если вникнуть. smile 
Цитата(animegirl @  14.2.2012,  20:11 Найти цитируемый пост)
только не могу до конца понять принцип его дейстия

Функции непонятны, что ли?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
animegirl
Дата 15.2.2012, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Цитата(Данкинг @  14.2.2012,  20:59 Найти цитируемый пост)
Функции непонятны, что ли?

Да не могу понять, что там внутри происходит


--------------------
Скажи миру - НЯ!
PM   Вверх
Данкинг
Дата 15.2.2012, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



Там же пишут:
Цитата

post "паровозиком" цепляется к датевремени и попадает в максимум, потом оттуда извлекается.

Вот ещё ФАК по функциям SQL.

Это сообщение отредактировал(а) Данкинг - 15.2.2012, 01:31


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Данкинг
Дата 15.2.2012, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



<...>

Это сообщение отредактировал(а) Данкинг - 15.2.2012, 01:30


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Zloxa
Дата 15.2.2012, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(animegirl @  15.2.2012,  00:24 Найти цитируемый пост)
не могу понять, что там внутри происходит 

stff Бабушкин метод
В своем первом посте(последнем в выборке) я еще пытался что-то объяснить.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
animegirl
Дата 17.2.2012, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Данкинг, Я не могу понять, зачем их соединять и разъединять? Почему обычного MAX не хватило?


--------------------
Скажи миру - НЯ!
PM   Вверх
Данкинг
Дата 17.2.2012, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



Так надо смотреть, что именно там требуется по заданию.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
animegirl
Дата 18.2.2012, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 24.7.2011

Репутация: нет
Всего: нет



Вот такой запрос, вроде как решил мою проблему:
Код

SELECT *
FROM (SELECT * FROM `0` WHERE fid=1 OR tid=1 ORDER BY time DESC) AS tabl
GROUP BY fid,tid

Насколько это так, буду тестировать.


--------------------
Скажи миру - НЯ!
PM   Вверх
Zloxa
Дата 18.2.2012, 15:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(animegirl @  18.2.2012,  13:28 Найти цитируемый пост)
 решил мою проблему:

Это вам лишь кажется.
То, что MySql допускает использование вывода не группируемых полей - противоестественное явление, большинство sql движков запрещает подобное. MySQL допускает, отмазываясь оптимизацией. Результат такого запроса оказывается недетерменирован. Отказ от обязательств четко прописан в документации.
Цитата

 The server is free to choose any value from each group, so unless they are the same, the values chosen are indeterminate. 

Т.е. производитель не гарантирует, что на одном и том же наборе данных вы будете иметь в результате группировки одинаковый результат всегда, при любых обстоятельствах. Детерменированность может быть получена только в том случае, если для каждой группы, все прочие поля оказываются всегда одинаковыми.

То, что не запрещена сортировка внутри подзапроса тоже, наверное "оптимизация". Оптимизатор, наверное просто не догадываетя ее оптимизировать. Потому и создается видимость, что это работает. Обещания, что сортировка внутри подзапроса таки будет выполняться, полагаю, вы нигде в документации не найдете.

Это сообщение отредактировал(а) Zloxa - 18.2.2012, 16:05


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0772 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.