Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Таблица:
Отредактированно animegirl (14.02.2012 16:44:17)
Неактивен
Это иллюстрация того почему при группировке нельзя выбирать поля без группирующих функций.
Для простоты рассмотрим след пример
SELECT * FROM `0` WHERE fid =1 GROUP BY fid;
У вас в таблице есть 4 строки, удовлетворяющих условию fid =1. При группировке мы оставляем одну строку. Вопрос какую строку выберет сервер? Ответ - любую.
Стандарт SQL запрещает такие запросы, однако сервер MySQL их позволяет и даже не ругается, отчего новички и совершают подобные промахи.
Возвращаясь к вашему вопросу - сортировка происходить после группировки, т.е. после того как выбрана случайная строка для каждой пары значений fid, tid.
От того, кстати, и происходит удвоение результатов, так как 1,2 и 2,1 - разные пары значений fid, tid.
Неактивен
Ну удвоение результатов не страшно, а как задачу решить?
Неактивен
animegirl написал:
Ну удвоение результатов не страшно,
А утроение ?
Неактивен
Нашла тут такой вариант:
Неактивен
Логика проста - при использовании группировки в части перечисления полей (после ключевого слова select) могут быть только те колонки по которым производится группировка или они используются с группирующей ф-ей (min,sum,count и т.д.)
В данном примере, на сколько я понимаю, вы хотите выбрать для каждого юзера последнее сообщение. По usr проводится группировка, дата последнего сообщения это max(dt), а колонка post без группирующей ф-ии, т.е. будет выбрана произвольная. Чтобы это обойти, время и сообщение объединяют в одну строку CONCAT(dt, post), от которой берут максимум.
А потом снова разделяют. 19 символов это формат даты ('2012-02-15 01:47:19').
Неактивен
Я правильно понимаю, что тут решена моя задача в один запрос? Как его только на мою таблицу перенести не совсем допонимаю ((
Неактивен
Нет, не правильно.
Чем вас не устраивает решение из поста №4?
Неактивен
4 селекта, к тому же унион и джойн, для операции которая будет происходит очень часто, это выйдет убийством DB сервера
Неактивен
Решила свою задачу таким способом:
Неактивен
Страниц: 1