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 или что-то еще для дальнейшей фильтрации результатов.

Другие вопросы по тегам