/ nodejs

mysql in clause order - sequelize.js

http://stackoverflow.com/questions/1631723/maintaining-order-in-mysql-in-query

mysql 의 in 절을 이용해서 query를 하면 in 절의 파라미터 순서대로 조회가 되지 않는 경우가 발생한다ㅠㅜ

이 부분을 in 절의 파라미터 순서에 맞게 하려면 아래와 같은 쿼리로 조회하면 가능하다.

SELECT * FROM foo f where f.id IN (2, 3, 1) ORDER BY FIELD(f.id, 2, 3, 1);

sequelize.js 에서 위 쿼리를 어떻게 날릴까 고민을 하다가 다행이 잘 지원을 한다. 아래를 참고하자.

      var ids = [2, 3, 1]
      Foo.findAll({where: {id: {in: ids}}, order: [
        [sequelize.fn.apply(sequelize, ['field', sequelize.col('id')].concat(ids))]

      ]}).done(function(err, rows) {
...
      })