2015-11-06 2 views
1

У меня есть таблица вроде этого.Получите идентификатор получателя каждого разговора

| id-AI | from | to | text   |created_date 
+----+---------+-------+-------------+------------- 
| 1 | 7  | 1  | from 7 to 1 |2015-11-06 04:59:14 
| 2 | 1  | 2  | from 1 to 2 |2015-11-06 04:57:06 
| 3 | 7  | 1  | from 7 to 1 |2015-11-06 04:25:45 
| 4 | 1  | 6  | from 1 to 6 |2015-11-06 04:25:32 
| 5 | 1  | 5  | from 1 to 5 |2015-11-06 04:25:16 

Я хочу, чтобы список, как this.A список пользователей, которые нокаутировал меня, или я нокаутирую его/ее или у нас был долгий разговор. список, который я хочу, должен быть в последнем порядке, так же как обмен сообщениями facebook.

| users | 
+-------+ 
| 7  
| 2  
| 6 
| 5 

1 основной пользовательский идентификатор. получить список, в котором 1 участвует (либо от или до), либо после этого это называется разговором.

+1

В чем проблема? Напишите запрос, который находит его в 'from', другой запрос, который находит его в' to', и объединяет их с 'UNION'. – Barmar

+0

будет ли он в последнем порядке по дате? –

+0

Это будет, если вы используете 'ORDER BY created_date DESC'. – Barmar

ответ

2

Вы можете использовать следующий запрос:

SELECT IF (`from` = 1, `to`, `from`) 
FROM mytable 
WHERE 1 IN (`from`, `to`) 
ORDER BY created_date DESC 

Это будет возвращать создатель или получатель каждый разговора, в котором user_id = 1 участвуют.

Demo here

получить упорядоченный набор различныхuser_id значений использовать этот запрос:

SELECT IF (`from` = 1, `to`, `from`) 
FROM mytable 
WHERE 1 IN (`from`, `to`) 
GROUP BY IF (`from` = 1, `to`, `from`) 
ORDER BY MAX(created_date) DESC 

Demo here

+0

Возвращает несколько значений. Мне нужен отдельный список пользователей. очевидно, что есть несколько записей одного идентификатора пользователя либо в поле, либо из поля, поскольку это разговор. –

+0

@RajibHossen Посмотрите на редактирование, которое я сделал. –

0

Использование UNION:

SELECT user 
FROM (SELECT to AS user, created_date 
     FROM mytable 
     WHERE from = 1) 
     UNION 
     SELECT from AS user, created_date 
     FROM mytable 
     WHERE to = 1) x 
GROUP BY user 
ORDER BY MAX(created_date) DESC 
Смежные вопросы