powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помагите дорабоать запрос
8 сообщений из 8, страница 1 из 1
Помагите дорабоать запрос
    #38700713
chrome1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите доработать
Код: php
1.
2.
3.
4.
mysql_query("SELECT u.id, mes.text  FROM users AS u, messages AS mes
WHERE (mes.recipient=u.id && mes.sender=5) || (mes.recipient=5 && mes.sender=u.id)
group by if(mes.sender=5,mes.recipient,mes.sender)
order by mes.datenew desc");



Данный запрос по идеи должен выводить последнее сообщение пользователя 5 с каким либо другим пользователем. Что он собственно и делает на половину. Но выводит список всех пользователей с которыми пользователь 5 вел общение. Но заместо последнего сообщения он выводит первое. И сама сортировка от последнего к первому выполняется неверно.

Она выполняется верно если сделать так.
Код: php
1.
order by max(mes.datenew) desc


Но я не уверен что это решение является правильным.
...
Рейтинг: 0 / 0
Помагите дорабоать запрос
    #38700749
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Показывайте, пожалуйста, сам запрос, без обвязки из постороннего кода.

Насколько я понял задачу, запрос нужен такой:
Код: sql
1.
2.
3.
4.
5.
SELECT mes.sender+mes.sender-5 AS id, mes.text
FROM messages AS mes
WHERE mes.sender=5 OR mes.recipient=5
ORDER BY mes.datenew DESC
LIMIT 1
...
Рейтинг: 0 / 0
Помагите дорабоать запрос
    #38700770
chrome1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftПоказывайте, пожалуйста, сам запрос, без обвязки из постороннего кода.
Хорошо спасибо за замечание в преть буду знать
miksoftНасколько я понял задачу, запрос нужен такой:
Код: sql
1.
2.
3.
4.
5.
SELECT mes.sender+mes.sender-5 AS id, mes.text
FROM messages AS mes
WHERE mes.sender=5 OR mes.recipient=5
ORDER BY mes.datenew DESC
LIMIT 1


Составленный вами запрос выводит одну информацию о переписке. А мне надо что бы выводилась информация о каждом пользователе с которым пользователь 5 вступал в переписку. Вне зависимости от того являться ли он инициатором или получателем. И также надо вывести информацию о последнем сообщении которое фигурировалось в переписке с тем или иным пользователем. И отсортировать весь результат по дате отправления сообщения
...
Рейтинг: 0 / 0
Помагите дорабоать запрос
    #38700773
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chrome1А мне надо что бы выводилась информация о каждом пользователе с которым пользователь 5 вступал в переписку. Вне зависимости от того являться ли он инициатором или получателем. И также надо вывести информацию о последнем сообщении которое фигурировалось в переписке с тем или иным пользователем. И отсортировать весь результат по дате отправления сообщенияА это уже другая задача, не та, что была в исходном посте.
См. FAQ: Выборка первой/последней записи в группах .
...
Рейтинг: 0 / 0
Помагите дорабоать запрос
    #38700774
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft
Код: sql
1.
mes.sender+mes.sender-5

Опечатка.
Код: sql
1.
mes.sender+mes.recipient-5
...
Рейтинг: 0 / 0
Помагите дорабоать запрос
    #38700779
chrome1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалею не вижу кнопки "спасибо". Поэтому так. Спасибо большое
...
Рейтинг: 0 / 0
Помагите дорабоать запрос
    #38700803
chrome1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прочитал приложенные посты исходя из них.
Привел запрос к такому виду.

Код: plsql
1.
2.
3.
SELECT u.id, SUBSTR(MAX(CONCAT(mes.datenew, mes.text)), 20) AS text,  MAX(mes.datenew)  FROM users AS u , messages AS mes
	WHERE (mes.recipient=u.id && mes.sender=5) || (mes.recipient=5 && mes.sender=u.id) group by if(mes.sender=5,mes.recipient,mes.sender)
	order by MAX(mes.datenew) desc



На первый взгляд все хорошо )) Выводит все верно )) Но вот меня не как не покидает мысль касаемо

Код: plsql
1.
SUBSTR(MAX(CONCAT(mes.datenew, mes.text)), 20) 


Я просто вставил его из поста как я понимаю выводит текст соответственно дате но вот что значит число 20? Просто я так глубоко еще не вникал поэтому не знаю в запросы.
И можно ли его урезать сделать более оптимальным ? Может кто подскажет
...
Рейтинг: 0 / 0
Помагите дорабоать запрос
    #38700817
chrome1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя все я полностью разобрался
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помагите дорабоать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]