|
|
|
| Здравствуйте!
Ингересует возможность сложной группировки.
В таблице сообщений msg есть
1 mid int(11) AUTO_INCREMENT
2 Numpost int(11)
3 Numreceive int(11)
4 message text utf8_general_ci
5 Md datetime
Можно ли посортировать сообщения по диалогам задейстровав Numpost и Numreceive?
Спасибо. | |
|
|
|
|
|
|
|
для: 1prom
(09.12.2012 в 02:11)
| | Так вам "посортировать" или "сложно погруппировать" надо? )
Вы уж определитесь. Это во-первых.
Во-вторых, опишите более внятно задачу. Добавьте кусок дампа и то, что хотелось бы получить из него. | |
|
|
|
|
|
|
|
для: Igorek
(09.12.2012 в 03:09)
| | Сори, нужно прогруппировать по получателях (отправителях), а потом посортировать по дате.
В таблице есть 2 номера (ид) - получателя и отправителя. $Numm - это мой номер. Нужно выбрать для меня сообщения - вот так примерно.
SELECT * FROM Msg where Numpost=$Numm or Numreceive=$Numm group by Numpost, Numreceive ORDER BY Md DESC
В результате должно быть выбрано примерно сообщения (напр.)
Сегодня полученное от Артура,
Вчера от Ксении
Позавчера отправленное Сергею
05 декабря полученное от Виталия | |
|
|
|
|
|
|
|
для: 1prom
(09.12.2012 в 12:18)
| | тогда я не понимаю, зачем здесь группировка. Если из вашего запроса убрать группировку, то получим все отправленные/принятые сообщения пользователя отсортированные по дате в порядке убывания.
для наглядности:
SELECT *,
if(Numpost=1,'отправлено','получено') as type,
CASE (TO_DAYS(md)-TO_DAYS(NOW()))
WHEN 0 THEN 'сегодня'
WHEN -1 THEN 'вчера'
WHEN -2 THEN 'позавчера'
ELSE md
END as dt
FROM Msg
where Numpost=1 or Numreceive=1
ORDER BY Md DESC
|
или здесь: http://sqlfiddle.com/#!2/1718c/17 | |
|
|
|
|
|
|
|
для: Igorek
(09.12.2012 в 13:41)
| | Из моего запроса делается выборка всех сообщений.
А я хочу, чтобы если одно последнее сообщение пользователю (от пользователя) отобразилось, то остальные сообщения от этого пользователя (этому пользователю) не отображались.
Нужно отобразить все диалоги отсортировав по дате по последнему сообщению | |
|
|
|
|
|
|
|
для: 1prom
(09.12.2012 в 14:26)
| | C этого и надо было начинать.
Еще не плохо было бы описать какое поле что обозначает.
Но если я правильно понял что к чему, то:
/*<?*/
SELECT numpost np
, numreceive nr
, max(md)mx
, (SELECT message FROM Msg WHERE numpost=np AND numreceive=nr AND md=max(m.md))mess
FROM Msg m
GROUP BY numpost, numreceive
|
| |
|
|
|
|
|
|
|
для: Sfinks
(10.12.2012 в 09:10)
| | Спасибо, но у меня невозможно выбрать строки.
Скрипт я немного изменил
SELECT Numpost np
, Numreceive nr
, max(Md) mx
, (SELECT Numpost, Numreceive, message FROM Msg WHERE Numpost=np AND Numreceive=nr AND Md=max(m.Md))
FROM Msg m
GROUP BY Numpost, Numreceive
|
так как у Вашего варианта mess по-моему никуда не клеится.
И все равно в phpmyadmin невозможно выбрать - пишет #1241 - Operand should contain 1 column(s) | |
|
|
|
|
|
|
|
для: 1prom
(12.12.2012 в 01:47)
| | > так как у Вашего варианта mess по-моему никуда не клеится.
А по-моему вы вообще не поняли, что делает этот запрос.
> И все равно в phpmyadmin невозможно выбрать - пишет #1241 - Operand should contain 1 column(s)
Не "И все равно", а потому что наделали ошибок в запросе.
> Спасибо, но у меня невозможно выбрать строки.
Это что означает?
- Выдает ошибку? Тогда ошибку в студию!
- Выдает пустой результат? Тогда давайте дамп таблицы
Или что-то еще? | |
|
|
|
|
|
|
|
для: 1prom
(09.12.2012 в 02:11)
| | Вероятно можно, однако следует более подробно описать, что в Numpost и Numreceive и что хотите получиться в конечном итоге? У нас нет перед глазами база данных, довольно трудно понять, какой запрос имеется в виду. | |
|
|
|
|
|
|
|
для: 1prom
(09.12.2012 в 02:11)
| |
(select numpost,numreceive,message,max(Md) as max_date
from msg
group by numpost)
union
(select numpost,numreceive,message,max(Md) as max_date
from msg
group by numreceive)
order by max_date;
|
| |
|
|
|