Вывод с объединением. mySql

Sankaboy

Постоялец
Регистрация
1 Фев 2012
Сообщения
112
Реакции
3
Привет ребята! Есть таблица мускула с архитектурой:
id | message | idpoluch | idotpr | time
0 | message1 | 1 | 2 | time
1 | message2 | 1 | 2 | time
2 | message3 | 2 | 1 | time
3 | message4 | 1 | 2 | time
4 | message5 | 5 | 4 | time
5 | message6 | 4 | 5 | time
6 | message7 | 1 | 4 | time
7 | message8 | 4 | 1 | time

id - AUTO_INCREMENT
message - text - текст сообщения
idpoluch, idotpr - int - id получателя и отправителя
time - datatime

А так же существует переменная в php, которая содержит мой id = 1.

Мой id в таблице может содержаться в полях idpoluch, idotpr, но ни как не одновременно в обоих. Т.е. в одном из них мой, в другом чужой.
Нужно сгруппировать поля и вывести по одной последней строке из каждой серий диалогов.

С приведенного примера таблицы, id = 1 общался только с двумя другими id. Значит у меня должно вывестись тольке 2 строки с последним сообщением.

Честно признаюсь - не хватает мозгов для решения.
За ранее спасибо!
 
Нужно сгруппировать поля и вывести по одной последней строке из каждой серий диалогов.

не так?
Код:
SELECT * FROM `table` WHERE `idpoluch` = 1 OR `idotpr` = 1 ORDER BY id DESC LIMIT 1

Нет, выведет только 1 запись :). Надо что-то с GROUP BY творить:crazy:
А если LIMIT 2 попробуй. получится 2

А если переписок тысячи?) Не в лимите дело, а в группировке скорее всего.
сорь, я хочу помочь но возможно немного не понял что нужно. приведи пример боевой. и для чего это. и какой должен быть вывод.
 
Последнее редактирование модератором:
Нет, выведет только 1 запись :). Надо что-то с GROUP BY творить:crazy:

А если переписок тысячи?) Не в лимите дело, а в группировке скорее всего.
 
Последнее редактирование модератором:
Пишется 2 запроса, но с разными колонками под вашего пользователя и объединяется через UNION
А так же существует переменная в php, которая содержит мой id = 1.

Мой id в таблице может содержаться в полях idpoluch, idotpr, но ни как не одновременно в обоих. Т.е. в одном из них мой, в другом чужой.
Нужно сгруппировать поля и вывести по одной последней строке из каждой серий диалогов.

Скобки нужны из-за ORDER BY и LIMIT в каждом из запросов:
PHP:
(SELECT * FROM `your_table` WHERE `idpoluch` = 1 ORDER BY `time` DESC LIMIT 1)
UNION
(SELECT * FROM `your_table` WHERE `idotpr` = 1 ORDER BY `time` DESC LIMIT 1)
 
  • Нравится
Реакции: ZiX
latteo, выводит так же так и пример Для просмотра ссылки Войди или Зарегистрируйся-а. Это все я пробовал. Возможно я не корректно пояснил вопрос.

Имеется заполненная таблица:

id | message | idpoluch | idotpr | time
0 | message1 | 1 | 2 | 1:00
1 | message2 | 1 | 2 | 1:10
2 | message3 | 2 | 1 | 1:11
3 | message4 | 1 | 2 | 1:12
4 | message5 | 5 | 4 | 1:00
5 | message6 | 4 | 5 | 1:01
6 | message7 | 1 | 4 | 1:02
7 | message8 | 4 | 1 | 1:03

Нужно получить в результате 3 диалога:
3 | message4 | 1 | 2 | 1:12
4 | message5 | 5 | 4 | 1:01
7 | message8 | 4 | 1 | 1:03

ПС. выводить последние по времени и не важно кто кому его отправлял. Диалогов может быть больше.
 
latteo, выводит так же так и пример Для просмотра ссылки Войди или Зарегистрируйся-а. Это все я пробовал. Возможно я не корректно пояснил вопрос.

Имеется заполненная таблица:

id | message | idpoluch | idotpr | time
0 | message1 | 1 | 2 | 1:00
1 | message2 | 1 | 2 | 1:10
2 | message3 | 2 | 1 | 1:11
3 | message4 | 1 | 2 | 1:12
4 | message5 | 5 | 4 | 1:00
5 | message6 | 4 | 5 | 1:01
6 | message7 | 1 | 4 | 1:02
7 | message8 | 4 | 1 | 1:03

Нужно получить в результате 3 диалога:
3 | message4 | 1 | 2 | 1:12
4 | message5 | 5 | 4 | 1:01
7 | message8 | 4 | 1 | 1:03

ПС. выводить последние по времени и не важно кто кому его отправлял. Диалогов может быть больше.

так по времени или только id = 1?
 
По времени сортируется именно последнее сообщение из переписки, а ИД выбирается юзер, который либо отсылал либо принимал сообщение.

Предпоследнее мое сообщ. ярко показывает какой должен быть рез.
 
Нужно получить в результате 3 диалога:
3 | message4 | 1 | 2 | 1:12
4 | message5 | 5 | 4 | 1:01
7 | message8 | 4 | 1 | 1:03

ПС. выводить последние по времени и не важно кто кому его отправлял. Диалогов может быть больше.

Откуда появится строка 4 | message5 | 5 | 4 | 1:01, если id = 1?
 
Откуда появится строка 4 | message5 | 5 | 4 | 1:01, если id = 1?
я поэтому и спросил время иль ид?
По времени сортируется именно последнее сообщение из переписки, а ИД выбирается юзер, который либо отсылал либо принимал сообщение.

Предпоследнее мое сообщ. ярко показывает какой должен быть рез.
Тогда 2 строки должно быть.

Так а что в наших вариантах не так? Чем не подходят?
 
Ребята, я уже сам запутался.

id = 1

id | message | idpoluch | idotpr | time
0 | message1 | 1 | 2 | 1:00
1 | message2 | 1 | 2 | 1:10
2 | message3 | 2 | 1 | 1:11
3 | message4 | 1 | 2 | 1:12
4 | message5 | 3 | 1 | 1:00
5 | message6 | 1 | 3 | 1:01
6 | message7 | 1 | 4 | 1:02
7 | message8 | 4 | 1 | 1:03
8 | message8 | 4 | 6 | 1:03
9 | message8 | 7 | 4 | 1:03

Должен быть рез.:
1 | message4 | 1 | 2 | 1:12
2 | message6 | 1 | 3 | 1:01
3 | message8 | 4 | 1 | 1:03
 
Назад
Сверху