Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.01.2014, 22:17
Аватар для VladShestakov999
Интересующийся
Отправить личное сообщение для VladShestakov999 Посмотреть профиль Найти все сообщения от VladShestakov999
 
Регистрация: 01.06.2013
Сообщений: 28

Помогите составить SQL-запрос
Здравствуйте! Есть таблица:

id int(10) UNSIGNED
from varchar(11)
to varchar(11)
text text
seen tinyint(1)
time varchar(25)

Где from и to это идентификаторы получателя и отправителя сообщения, text - содержание, seen - было ли прочитано сообщение, time - время отправки в формате TIMESTAMP.

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

Например, если таблица заполнена так:

id from to text seen time
9 9 13 Здарова 0 20140129184307
10 9 11 Есть... 0 20140129185828
11 9 11 Как сам? 0 20140129190121
13 11 9 Да, лови 0 20140129192328

То результат должен быть следующим:

id from to text seen time
9 9 13 Здарова 0 20140129184307
13 11 9 Да, лови 0 20140129192328

Последний раз редактировалось VladShestakov999, 29.01.2014 в 22:44.
Ответить с цитированием
  #2 (permalink)  
Старый 29.01.2014, 22:55
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от VladShestakov999
а мой собеседник уникален."
Это не совсем понятно...
В твоем пример только 3 участника и каждый человек уникален по определению. Т.е. клонов у нас вроде как нет.

Сообщение от VladShestakov999
Например, если таблица заполнена так:

id from to text        seen   time
9  9     13 Здарова   0       20140129184307
10 9    11 Есть...     0       20140129185828
11 9    11 Как сам?  0       20140129190121
13 11   9  Да, лови  0        20140129192328


То результат должен быть следующим:

id from to text        seen   time
9  9     13 Здарова   0       20140129184307
13 11   9  Да, лови  0        20140129192328
Могу предположить, что нужны только уникальные пары from + to...
Но опять не понятно:
- сохраняется ли твоя "уникальность" в симметрии Я+ОН и ОН+Я
- если нужны только "уникальные" - условие "по одному последнему сообщению" вообще лишено смысла
Ответить с цитированием
  #3 (permalink)  
Старый 29.01.2014, 23:00
Аватар для VladShestakov999
Интересующийся
Отправить личное сообщение для VladShestakov999 Посмотреть профиль Найти все сообщения от VladShestakov999
 
Регистрация: 01.06.2013
Сообщений: 28

Или лучше так: "Дай мне по одному последнему сообщению, во всех переписках со мной." (независимо кто отправлял или получал последнее сообщение). В общем как в социальных сетях -- например ВК ты открываешь страницу "Мои сообщения" и тебе выползают все диалоги и по одному последнему сообщению из них, вот мне нужно то же самое. (То есть последнее сообщение)

Последний раз редактировалось VladShestakov999, 29.01.2014 в 23:02.
Ответить с цитированием
  #4 (permalink)  
Старый 29.01.2014, 23:01
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от VladShestakov999
Дай мне по одному последнему сообщению, в переписке двух людей.
Это уже другое дело.
Ответить с цитированием
  #5 (permalink)  
Старый 29.01.2014, 23:10
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

VladShestakov999, как вариант:
- сделать фиктивный столбец "участники"
- останется только найти записи участников с максимальной датой

Последний раз редактировалось ksa, 29.01.2014 в 23:13.
Ответить с цитированием
  #6 (permalink)  
Старый 29.01.2014, 23:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сейчас нет СУБДшки под рукой... Т.ч. пока только на словах...
Ответить с цитированием
  #7 (permalink)  
Старый 29.01.2014, 23:15
Аватар для VladShestakov999
Интересующийся
Отправить личное сообщение для VladShestakov999 Посмотреть профиль Найти все сообщения от VladShestakov999
 
Регистрация: 01.06.2013
Сообщений: 28

Спасибо! Натолкнул на идею. Сделаю так: чтобы не нарушать правила Эдгара Кодда, я создам таблицу dialogs вида:

id int(10) UNSIGNED
firstmem varchar(11)
secondmem varchar(11)

А вместо to и from в таблице сообщений буду хранить поле did (Dialog id) и дальше по накатаной.

Последний раз редактировалось VladShestakov999, 29.01.2014 в 23:20.
Ответить с цитированием
  #8 (permalink)  
Старый 29.01.2014, 23:25
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

VladShestakov999, по первому варианту таблички можно вот такой запрос попробовать

Select
	*
From
	table as a
Where
	a.time=(
		Select
			max(b.time)
		From
			table as b
		Where
			(
				b.from=a.from
				and
				b.to=a.to
			)
			Or
			(
				b.from=a.to
				and
				b.to=a.from
			)
	)
Ответить с цитированием
  #9 (permalink)  
Старый 02.02.2014, 11:41
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от VladShestakov999
Выбери мне по одному последнему сообщению, где получатель или отправитель я, а мой собеседник уникален."

select * from сообщения where получатель = я and отправитель = я and дата=последняя group by собеседник
Ответить с цитированием
  #10 (permalink)  
Старый 02.02.2014, 14:39
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от kostyanet
получатель = я and отправитель = я
Ты сам-то понял, что написал?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите составить запрос в БД posta Серверные языки и технологии 3 29.06.2012 09:33
Подставляем определенное значение в SQL запрос в зависмости от разрешения монитора MironM Общие вопросы Javascript 5 09.04.2012 21:54
Составить Ajax запрос и json LASSO jQuery 1 16.02.2012 03:36
Помогите, пожалуйста, составить запрос на jQuery Gremlin Общие вопросы Javascript 2 28.09.2011 18:42
Помогите подставить запрос. BMWSauber Events/DOM/Window 1 07.02.2010 23:13