プログラミング バックエンド

【Sequelize】氏名検索など複数カラムを跨いで検索したい時の書き方(MySQL)

スポンサーリンク

こんにちは!

今回は「Sequelize、氏名検索など複数カラムを跨いで検索したい時の書き方」についてお伝えしたいと思います。

調べてもあまりヒットしなかったので、今回共有させていただきます。

複数カラムを跨いで検索(SELECT)したいときはCONCATを使う

CONCATと聞くと、GROUP CONCAT もありますが、今回はCONCAT を使います。

以下は実際の書き方の例です。

// node.js環境
const {literal, Op, col} = db.Sequelize;
const db = require('../models/index');
exports.getUser = () => {
  const sequelize = db['database'];
  const dbName = sequelize.models;
  return new Promise((resolve, reject) => {
    dbName.user.findOne({
      attributes: [
        'id',
      ],
      where: sequelize.where(
          sequelize.fn(
              'CONCAT',
              sequelize.col('family_name'), // 引数にはカラム名を指定
              sequelize.col('first_name'), // 引数にはカラム名を指定
          ),
          {[Op.like]: `%山田太郎%`}, // 例として固定値で山田太郎としてますが、変数名に置き換えてください。
      ),
      raw: true,
    }).then((data) => {
      resolve(data);
    }).catch((err) => {
      reject(err);
    });
  });
};

 

このように記述することで、userテーブルから「性(family_name)+名(first_name)」が「山田太郎」に一致するレコードを取得することができます。

注意点として、入力フォームの値から半角スペース、全角スペースをtrimしてあげる必要があります。

入力値変換前:山田 太郎
入力値変換後:山田太郎

 

以上、お疲れさまでした🍵

スポンサーリンク

-プログラミング, バックエンド
-,

© 2021 エンジニア×ライフハック Powered by AFFINGER5