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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Группировка 
:(
    Опции темы
Gold Dragon
Дата 19.11.2013, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Подучаю данные из таблицы запросом
Код

SELECT p.id AS post_id, p.poster, p.poster_id, p.posted, p.topic_id
FROM `fl_posts` AS p
ORDER BY p.posted DESC


Код

`post_id`, `poster`, `poster_id`, `posted`, `topic_id`

22, 'Gold Dragon', 2, 1384864419, 2
21, 'Гостья', 1, 1384863189, 5
20, 'tester', 5, 1384862945, 5
19, 'tester', 5, 1384862874, 4
18, 'Кузя', 1, 1384862763, 4
17, 'Gold Dragon', 2, 1384855627, 4
16, 'Gold Dragon', 2, 1384855614, 4
15, 'Gold Dragon', 2, 1384855586, 3
14, 'Gold Dragon', 2, 1384855577, 3
13, 'Gold Dragon', 2, 1384855518, 2
12, 'Gold Dragon', 2, 1384855470, 2
11, 'Gold Dragon', 2, 1384855460, 2


как видно topic_id повторяется. А нужно уникальное значение.

Делаю группировку
Код

SELECT p.id AS post_id, p.poster, p.poster_id, p.posted, p.topic_id
FROM `fl_posts` AS p
GROUP BY p.topic_id
ORDER BY p.posted DESC


и получается какая-то фигня.
Код

20, 'tester', 5, 1384862945, 5
16, 'Gold Dragon', 2, 1384855614, 4
14, 'Gold Dragon', 2, 1384855577, 3
11, 'Gold Dragon', 2, 1384855460, 2


Берутся первые значения из каждого topic_id, а нужны последние..

Что и как поправить??



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Zloxa
Дата 19.11.2013, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(Gold Dragon @  19.11.2013,  17:34 Найти цитируемый пост)
нужны последние..

http://www.sql.ru/forum/687908/faq-vyborka...apisi-v-gruppah

Добавлено @ 17:04
Цитата(Gold Dragon @  19.11.2013,  17:34 Найти цитируемый пост)
какая-то фигня.

Цитата

MySQL extends the use of GROUP BY so that the select list can refer to nonaggregated columns not named in the GROUP BY clause. This means that the preceding query is legal in MySQL. You can use this feature to get better performance by avoiding unnecessary column sorting and grouping. However, this is useful primarily when all values in each nonaggregated column not named in the GROUP BY are the same for each group. The server is free to choose any value from each group, so unless they are the same, the values chosen are indeterminate. Furthermore, the selection of values from each group cannot be influenced by adding an ORDER BY clause. 


http://dev.mysql.com/doc/refman/5.0/en/gro...extensions.html

Добавлено @ 17:12
ну и, конечно - же Бабушкин метод. Как же без него в такой теме smile

ну и, другими словами, для MySQL красивого, эстетичного, масштабируемого решения, годного к испльзованию в продакшн - нет. Надо велосипедировать, готовить данные для выборки загодя.

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


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


Советчик
****


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

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



Цитата(Gold Dragon @  19.11.2013,  17:34 Найти цитируемый пост)
как видно topic_id повторяется. А нужно уникальное значение.

Цитата(Gold Dragon @  19.11.2013,  17:34 Найти цитируемый пост)
нужны последние..

Почему проблема дубликатов не решена на стадии занесения данных?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gold Dragon
Дата 19.11.2013, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



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

если не трудно, можно на пальцах?  smile 

вот таблица

Код

CREATE TABLE `fl_posts` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `poster` VARCHAR(200) NOT NULL DEFAULT '',
    `poster_id` INT(10) UNSIGNED NOT NULL DEFAULT '1',
    `poster_ip` VARCHAR(39) NULL DEFAULT NULL,
    `poster_email` VARCHAR(80) NULL DEFAULT NULL,
    `message` MEDIUMTEXT NULL,
    `hide_smilies` TINYINT(1) NOT NULL DEFAULT '0',
    `posted` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    `edited` INT(10) UNSIGNED NULL DEFAULT NULL,
    `edited_by` VARCHAR(200) NULL DEFAULT NULL,
    `topic_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`),
    INDEX `fl_posts_topic_id_idx` (`topic_id`),
    INDEX `fl_posts_multi_idx` (`poster_id`, `topic_id`)
)


вот данные
Код

INSERT INTO `fl_posts` (`id`, `poster`, `poster_id`, `poster_ip`, `poster_email`, `message`,
 `hide_smilies`, `posted`, `edited`, `edited_by`, `topic_id`) VALUES
(11, 'Gold Dragon', 2, '127.0.0.1', NULL, 'Вопрсо темы', 0, 1384855460, NULL, NULL, 2),
(12, 'Gold Dragon', 2, '127.0.0.1', NULL, 'сообщение 1', 0, 1384855470, NULL, NULL, 2),
(13, 'Gold Dragon', 2, '127.0.0.1', NULL, 'сообщение 2', 0, 1384855518, NULL, NULL, 2),
(14, 'Gold Dragon', 2, '127.0.0.1', NULL, 'Вопрос темы 2', 0, 1384855577, NULL, NULL, 3),
(15, 'Gold Dragon', 2, '127.0.0.1', NULL, 'сообщение 1 темы два', 0, 1384855586, NULL, NULL, 3),
(16, 'Gold Dragon', 2, '127.0.0.1', NULL, 'Вопрос в теме шаблонов', 0, 1384855614, NULL, NULL, 4),
(17, 'Gold Dragon', 2, '127.0.0.1', NULL, 'сообщение 1 в теме шаблонов', 0, 1384855627, NULL, NULL, 4),
(18, 'Кузя', 1, '127.0.0.1', '[email protected]', 'какое-то сообщение', 0, 1384862763, NULL, NULL, 4),
(19, 'tester', 5, '127.0.0.1', NULL, 'abuyz', 0, 1384862874, NULL, NULL, 4),
(20, 'tester', 5, '127.0.0.1', NULL, 'что-то такое', 0, 1384862945, NULL, NULL, 5),
(21, 'Гостья', 1, '127.0.0.1', '[email protected]', 'jfk hkjfdh jkh', 0, 1384863189, NULL, NULL, 5),
(22, 'Gold Dragon', 2, '127.0.0.1', NULL, 'trtrtr', 0, 1384864419, NULL, NULL, 2);


Нужно получить Х последних записей, но topic_id должен быть уникальным

Добавлено @ 21:13
Цитата(Akina @  19.11.2013,  21:09 Найти цитируемый пост)
Почему проблема дубликатов не решена на стадии занесения данных? 
Может не так объяснил.. Это таблицы форума. Нужно получить определённое количество последних сообщений форума. Но при этом  нужно получить только одно последнее сообщение из каждой темы.


Это сообщение отредактировал(а) Gold Dragon - 19.11.2013, 21:15


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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