Во-первых, вы должны понимать, что DISTINCT - это не функция, а модификатор запроса.Скобки не меняют это.DISTINCT означает, что если есть строки, в которых каждый возвращенный столбец идентичен, уменьшите дубликаты до одной строки.Вы не можете сократить до одной строки на отдельное значение в одном столбце (это задача GROUP BY).
Во-вторых, наборы результатов SQL правильно имеют одно значение на строку на столбец.Вы можете выполнить какую-либо агрегированную конкатенацию строк, такую как MySQL GROUP_CONCAT, или эквивалентную агрегатную функцию в PostgreSQL , но затем вы получите строку, объединяющую все значения, которые затем вам нужно будет взорвать в Rubyкод после извлечения.
Так что, если у вас есть несколько строк для выборки для данного users.id
, просто дайте им вернуться в приложение в несколько строк.Затем выполните некоторую последующую обработку данных в вашем приложении.Цикл извлечения строк и добавление атрибутов к объекту Ruby один за другим.Если вы извлекаете данные для нескольких идентификаторов пользователей в данном запросе, вставьте атрибуты в хэш ваших пользовательских объектов, используя ключ идентификатора пользователя.Таким образом, вам не нужно извлекать строки в каком-либо определенном порядке.
В-третьих, из ваших столбцов "name" и "value" я делаю вывод, что вы используете Entity-Attribute-Значение дизайн, где пользователи имеют несколько атрибутов, по одному на строку.Это проект, который подрывает традиционный реляционный доступ к данным, поэтому вам в конечном итоге придется писать код приложения для предварительной и последующей обработки данных.Если бы вы могли поместить каждый атрибут в свой собственный обычный столбец, который был бы реляционным способом хранения данных, ваши запросы SQL были бы намного проще.