2013-06-14 2 views
2

я имею следующую структуру базы данных (для обмена сообщениями):ищет хитрый SQL запросов решения

id from_userid to_userid time_stamp message 

скажем я пользователь с идентификатором 1, и я хочу, чтобы получить список ВСЕХ user_ids I» вы взаимодействовали с, отсортированы по метке времени - любая идея, как это сделать?

спасибо

+0

'' from_id'' и '' to_id'' являются идентификаторами пользователей? – mzedeler

+0

да (обновит сообщение) – Fuxi

+2

скажем, вы что-то пробовали, что бы это было? – PiLHA

ответ

3

Что-то вроде этого, может быть?

SELECT * 
    FROM (
    SELECT from_id AS id, time_stamp 
     FROM <table> 
     WHERE to_id=<user id> 
     UNION 
    SELECT to_id AS id, time_stamp 
     FROM <table> 
     WHERE from_id=<user id> 
    ) AS t 
ORDER BY time_stamp 
+2

В подзапросе нет предложений 'FROM'? –

+0

О, ну ... я добавлю это – mzedeler

+0

Спасибо за помощь. – mzedeler

1
SELECT * 
FROM your_table 
WHERE from_userid = 1 OR to_userid = 1 
ORDER by time_stamp 
1

Я хотел бы сделать это следующим образом:

  • выбрать все значения + временные метки, где "я" from_userid
  • выбрать все значения + временные метки, где "я" является to_userid
  • в обоих выбирает одноименное имя для другого пользователя ID
  • присоединиться к результирующим наборам, используя UNION ALL
  • затем заказать результат по столбцу временной метки
  • группа по идентификатору пользователя и мин (метки времени)

В SQL Server это будет что-то вроде этого:

select rel_user, min(time_stamp) as first_contact from 
    ( 
    select time_stamp, to_userid as rel_user where from_userid=my_ID 
    union all 
    select time_stamp, from_userid as rel_user where to_userid=my_ID 
) 
group by rel_user 
order by min(time_stamp) 
0

Поскольку все другие способы используйте более одного SELECT, используя CASE

SELECT CASE 
    WHEN to_userid=1 THEN from_userid 
    ELSE to_userid 
FROM table WHERE to_userid=1 OR from_userid=1 ORDER BY time_stamp 
+0

ИМХО Сложно без выгоды. –

+0

IMO легче понять, чем делать несколько выборок и союзов, чтобы заставить его работать – Don

Смежные вопросы