Проблема с выбором уникальных полей, но сортированных по определенному принципу.
1. пробовал использовать distinct но он в MySQL не работает
2. сделал запрос с оператором group by. Но тут возникла другая проблема:
group by сортирует все по своему, не взирая на последующие в операторе order by параметры.
мне надо сначала отсортировать поля по mess.status desc а уж потом из выборки сделать group by (а получается наоборот)
Пожалуйста, посоветуйте что-нибудь. Запрос и таблицы - ниже
Select pupils.ID, message, status, touserID, fromuserID, firstname
From pupils, mess where
(pupils.ID=touserID and fromuserID=1)
or
(pupils.ID=fromuserID and touserID=1)
group by pupils.ID
order by mess.status desc, mess.ID desc
Таблицы
pupils - люди
mess - сообщения, которые они пишут друг другу.
"1" - это pupils.ID=1. выборка сделана под него. то есть кому он написал и кто ему написал.
после выборки должны быть уникальные люди (без повторов)
и сообщения должны быть рассортированы по принципу: сначала новые (1) а потом прочитанные (0) . Но только по одному ПОСЛЕДНЕМУ сообщению.
Но если выполнить мой запрос, то получается не так (точнеее не всегда так как надо )
даже демп привожу, что бы была именна та ситуация что и у меня. (когда выдает неправильный запрос)
CREATE TABLE `mess` (
`ID` int(11) NOT NULL auto_increment,
`touserID` int(11) NOT NULL default \'0\',
`fromuserID` int(11) NOT NULL default \'0\',
`message` text NOT NULL,
`status` tinyint(4) NOT NULL default \'1\',
PRIMARY KEY (`ID`)
) TYPE=MyISAM AUTO_INCREMENT=7 ;
#
# Дамп данных таблицы `mess`
#
INSERT INTO `mess` VALUES (1, 1, 2, \'сообщ 2 к 1\', 0);
INSERT INTO `mess` VALUES (2, 2, 1, \'сообщ 1 к 2\', 0);
INSERT INTO `mess` VALUES (3, 1, 2, \'сообщ 2 к 1\', 1);
INSERT INTO `mess` VALUES (4, 2, 1, \'сообщ 1 к 2\', 1);
INSERT INTO `mess` VALUES (5, 1, 3, \'сообщ 3 к 1\', 0);
INSERT INTO `mess` VALUES (6, 1, 3, \'сообщ 3 к 1\', 1);
# --------------------------------------------------------
#
# Структура таблицы `pupils`
#
CREATE TABLE `pupils` (
`ID` int(11) NOT NULL auto_increment,
`firstname` varchar(30) NOT NULL default \'\',
PRIMARY KEY (`ID`)
) TYPE=MyISAM AUTO_INCREMENT=4 ;
#
# Дамп данных таблицы `pupils`
#
INSERT INTO `pupils` VALUES (1, \'чел1\');
INSERT INTO `pupils` VALUES (2, \'чел2\');
INSERT INTO `pupils` VALUES (3, \'чел3\');
Прежде чем добавлять - изучил форум. нашел интересные решения. использовал.
В приведенных мною данных (когда мало) работает.
SELECT pupils.ID, MAX( status ) , message, touserID, fromuserID, firstname FROM pupils, mess WHERE ( pupils.ID = touserID AND fromuserID =1 ) OR ( pupils.ID = fromuserID AND touserID =1 ) GROUP BY pupils.ID ORDER BY mess.status DESC , mess.ID DESC
А по боевому, все ж НЕ так как надо.
Так что проблема актуальна. Прошу помощи.