таблице по неограниченному кол-ву неточных значений, задаваемых юзером. Что почитать на эту тему?
Для начала, раскройте определение термина "неточное значение" (несмотря на то, что можно примерно догадываться, что это значит) — желательно с примером. Далее проделать аналогичные мероприятия касательно "поиска/фильтрации по нескольким колонкам".
Всем привет сформулирую вопрос более точно: Есть две таблицы: create table users (id uuid not null primary key, user_name text not null, created_at timestamp not null default now()) create table payments (id uuid primary key not null, user_id uuid not null references users (id) on delete cascade, label text not null) Пользователь желает отфильтровать всех юзеров по одному или нескольким доступным фильтрам (ids - [{*uuid1*}, {*uuid2*}], usernames - ["str_or_sub_str1", "str_or_sub_str1"] , created_from - timestamp, created_to - timestamp, payments_more_then - bigint, labels - ["str_or_sub_str1","str_or_sub_str1"], limit - bigint, offset - bigint) В общем то вопрос - в какую сторону копать, о чём почитать?
> created_at timestamp not null default now() Не делайте так: https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_timestamp_.28without_time_zone.29 > отфильтровать всех юзеров Т.е. в результате будут только поля users? > usernames - ["str_or_sub_str1", "str_or_sub_str1"] А что значит or_sub_str1? Вхождение подстроки в название (с произвольной позиции)? > created_from - timestamp, created_to - timestamp, Что это значит? Наличие (хотя бы одного) payment у данного user в заданном диапазоне timestamps? > payments_more_then - bigint А это что значит (и да, правильно more-than (больше, чем, а не больше, тогда)? Количество payments или что (никаких сумм в примере нет — это упущение или нет)? > limit - bigint, offset - bigint А ORDER BY всегда какой-то фиксированный?
- Не делайте так: Учту, спасибо. - Т.е. в результате будут только поля users? Не только, так же будет общее колл-во платежей для конкретного юзера. - А что значит or_sub_str1? Вхождение подстроки в название (с произвольной позиции)? Да, всё верно - подстрока с произвольной позиции. - Что это значит? Наличие (хотя бы одного) payment у данного user в заданном диапазоне timestamps? Дата создания юзеров в заданном диапазоне дат. - А это что значит (и да, правильно more-than (больше, чем, а не больше, тогда)? Количество payments или что (никаких сумм в примере нет — это упущение или нет)? Кол-во платежей юзеа больше чем заданное число. - А ORDER BY всегда какой-то фиксированный? Да фиксированный order by created_at desc Спасибо большое за наводящие вопросы.
Осталось только понять как реализовать поиск строки(-ок) целиком/подстроки(-ок) с произвольной позиции, а так, в целом, направление понятно.
username LIKE '%подстрока%' / username ILIKE '%подстрока%' . Или операторы: List of operators Name | Description -------+------------------------------------------------------------------- ~ | matches regular expression, case-sensitive ~* | matches regular expression, case-insensitive ~~ | matches LIKE expression ~~* | matches LIKE expression, case-insensitive
Обсуждают сегодня