2017-10-08 2 views
1

私はpg-promiseといくつかの問題を抱えているところインチPG-約束mulitple OR句

私はWHERE句でのパラメータの未定義の数を指定したいと思います。

すべてのパラメータはORで連結されます。

db.any(
    'SELECT genre FROM genres'+ 
    'WHERE ((genres.genre LIKE \'Animation\' OR genres.genre LIKE \'Action\') ') 
    .then(function(data) { 
    // success; 
    }) 
    .catch(function(error) { 
    // error; 
    }); 
}); 

パラメータを1つずつ指定する代わりに、ユーザーが渡したジャンルの配列があります。私はそれを動作させるための方法を見つけることができません

var genres = ["Action", "Adventure", "Romantic"]; 
db.any(
     'SELECT genre FROM genres'+ 
     'WHERE ((genres.genre LIKE $1) '), [genres]) 
     .then(function(data) { 
     // success; 
     }) 
     .catch(function(error) { 
     // error; 
     }); 
}); 

私はこのような何かをしたいと思います

...。

ありがとうございました!

+0

'PG-promise'があるすべてのあなたが好きなSQLの生成について

あなたのケースで最も簡単な

LIKE ANY(array[...])構文を使用することです。したがって、生成する必要がある**有効な**最終SQLの例を含める必要があります。私は 'LIKE $ 1 'があなたのケースで有効なSQLになるとは思わない。 –

答えて

1

あなたの質問は、複数のLIKEの使用ではなく、pg-promiseのためのPostgreSQLの構文の詳細です。 Combining multiple like queriesを参照してください。

const genres = ['Action', 'Adventure', 'Romantic']; 

db.any('SELECT genre FROM genres WHERE genre LIKE ANY($1)'), [genres]) 
     .then(data => { 
      // success, data = matching genres 
     }) 
     .catch(error => { 
      // error 
     }); 
}); 

これは、フォーマットして実行します::

SELECT genre FROM genres WHERE genre LIKE ANY(array['Action', 'Adventure', 'Romantic']) 
+0

ありがとう!解決済み。 AND演算子でも同じことができますか? – Atomos

+0

@Atomosの 'AND'論理は' LIKE'オペランドの文脈では意味をなさない。だから私はあなたが何を求めているのか分からない。 –