Intereting Posts
Почему не могут взаимодействовать скрипты на стороне сервера и на стороне клиента? Разделяйте кнопки отправки в формах, которые сообщают форму «действие» для публикации в разные файлы? Маршрутизация Laravel меняется Howto Reverse-Engineer REST-Webservice Загрузка изображения Codeigniter будет загружаться только в один каталог Ошибка анализа: синтаксическая ошибка, неожиданный $ end Отображение изображений из пути в PHP из MySQL Является ли ресурс ActiveRecord от CodeIgniter интенсивным? Каков наилучший способ привязки значений десятичных / двойных / плавающих значений с PDO в PHP? Как отправить два значения в поле параметров? jquery ajax не работает без точки прерывания firebug Регулярное выражение для определения недопустимой строки UTF-8 Почему некоторые операции с потоковыми массивами в PHP, похоже, не работают? Как обновить версию SQLite в комплекте с PHP Разбивка в WordPress – не удается перейти на другие страницы

MySQL получает разговор между двумя пользователями

У меня есть таблица SQL с именем private_messages с полями (id, from, to, message, stamp). поле штампа соответствует дате сообщения

Итак, какой запрос мне нужен:

1) получить разговор между двумя пользователями (упорядочен по дате)?

Я попробовал запрос

(SELECT * FROM private_messages WHERE from=$my_id AND to=$other_id) UNION (SELECT * FROM private_messages WHERE from=$other_id AND to=$my_id) ORDER BY stamp ; 

но не работает …

2) получать последние сообщения между мной и другими пользователями, каждый с другим пользователем, упорядоченным по дате (например, для создания почтового ящика, например, в faceebook)?

1.)

 SELECT * FROM private_messages a WHERE (a.from = $my_id AND a.to = $other_id) OR (a.from = $other_id AND a.to = $my_id) ORDER BY stamp DESC 

2.)

 SELECT f.* FROM ( SELECT * FROM private_messages a WHERE (LEAST(a.from, a.to), GREATEST(a.from, a.to), a.stamp) IN ( SELECT LEAST(b.from, b.to) AS x, GREATEST(b.from, b.to) AS y, MAX(b.stamp) AS msg_time FROM private_messages b GROUP BY x, y ) ) f WHERE $my_id IN (f.from, f.to) ORDER BY f.stamp DESC 

Можете ли вы попробовать это?

 SELECT x.* FROM (SELECT * FROM private_messages WHERE `to`='$my_id' OR `from`='$my_id' GROUP BY `to`, `from`) AS x ORDER BY x.stamp DESC ; 

To , From могут быть зарезервированы слова . Заметил, что x является псевдонимом таблицы.

Я сделал это в прошлом, но с простым запросом. Может быть, это сработает для вас

  SELECT * FROM private_messages WHERE (from=$my_id AND to=$other_id) OR (from=$other_id AND to=$my_id) ORDER BY stamp 

1) Довольно уверен, что вам нужны котировки вокруг ваших переменных PHP, например:

 (SELECT * FROM private_messages WHERE from='$my_id' AND to='$other_id') UNION (SELECT * FROM private_messages WHERE from='$other_id' AND to='$my_id') ORDER BY stamp DESC 

2) Попробуйте что-то вроде:

 SELECT * FROM (SELECT * FROM private_messages WHERE to='$my_id' OR from='$my_id' GROUP BY to, from) AS tmp_table ORDER BY stamp DESC