sql: DISTINCT даст мне повторяющиеся результаты
Здравствуйте, я использую следующий запрос
Message.select("DISTINCT(commentable_id, user_id) as owner_id").map(&:owner_id)
Это дает мне такой результат: ["(8,9)", "(8,84)", "(9,8)", "(84,8)"]
здесь "(8, 9)" и "(9, 8)" возвращаются как разные, но я хочу только одну запись. Значит результат должен быть как
["(8,9)", "(8,84)"] Итак, как мне этого добиться.
Обновить
My table:
id | user_id | commentable_id
1 | 8 | 9
2 | 8 | 84
3 | 9 | 8
4 | 84 | 8
5 | 8 | 84
И я хочу получить результат с идентификатором 1, 2. На самом деле это просмотр разговора, поэтому я либо отправитель (user_id), либо получатель (commentable_id). Если я пользователь с идентификатором 8, то в моем представлении разговора у меня будет только два с идентификатором 9 и 84.
Спасибо
2 ответа
Вы можете выразить то, что вы хотите в SQL, используя greatest()
а также least()
функции:
select distinct least(user_id, commentable_id) as id1, greatest(user_id, commentable_id) as id2
from mytable;
Вы также должны быть в состоянии выразить это в Ruby on Rails.
SQL DISTINCT работает так, как он предназначен. Это может быть слишком сложно сделать только с помощью SQL. Поскольку вы используете Ruby, я бы предложил использовать цикл for-in или что-то еще для дальнейшей фильтрации результатов.