Функция для получения строк из БД по нескольким столбцам условно - PullRequest
0 голосов
/ 05 июня 2018

Допустим, у меня есть GET маршрут для /movies (на самом деле это не фильмы, но так будет проще объяснить)

На стороне клиента у меня есть таблица, которую я хочу отфильтроватьфильмы в зависимости от раскрывающихся меню:

Жанр, год, страна, тип (по умолчанию они все включены ALL)

Это также столбцы в БД для таблицы movies.Я использую node-postgres

Так что мой запрос будет выглядеть так:

  const query = {
    text: 'SELECT * FROM movies WHERE genre = $1 AND year = $2 AND country = $3 AND type = $4',
    values: [genre, year, country, type],
  };

Но это не сработает, если пользователь ничего не выберет извыпадающий список (это будет ALL)

Каков наилучший способ сделать это, чтобы, если клиент отправил ALL, он просто не добавил этот столбец в запрос?

1 Ответ

0 голосов
/ 05 июня 2018

Я думаю, что у вас нет выбора, вы должны ставить свои условия, только если они применимы ...

Например:

const params = {
    genre: null,
    year: 2015,
    country: null,
    type: 'western',
};

const query = {
    text: 'SELECT * FROM movies',
    values: Object.values(params).filter(x => x),
};

if (Object.values(params).filter(x => x).length) {
    query.text += ' WHERE '
    let i = 1;
    for (const param of Object.keys(params).filter(x => params[x])) {
        query.text += `${param} = $${i} AND `
        i++;
    }
    query.text = query.text.substr(0, query.text.length - 5);
}

console.log(query); // {"text":"SELECT * FROM movies WHERE year = $1 AND type = $2","values":[2015,"western"]}

Надеюсь, это поможет.

...