sql >> データベース >  >> RDS >> PostgreSQL

RESTfullの方法でデータベース列のnullエントリをカウントします

    コードに非同期/チェーン構文の混乱が少しあり、さらに値を正しくエスケープしていません。正しいコードは次のようになります:

    router.get('/:name/count', async (req, res) => {
     try {
          const {count} = await db.one('SELECT count(*) FROM $1:name WHERE $2:name IS NULL',
                                         ['mytable', req.params.name]);
          res.status(200).send(count);
      } catch(err) {
          console.log(err);
      }
    });
    

    また、回避策も間違っているように見えます。間違ったデータベースコンテキストdbを使用しています。 タスク内ですが、tである必要があります :

    router.get('/:name', async (req, res) => {
        try {
               const result = await db.task(async t => {
                  const data = await t.any('SELECT $1:name, $2:name FROM $3:name ORDER BY($2:name)', [req.params.name, 'time', 'mytable']);
                  const {count:numOfNulls} = await t.one('SELECT count(*) FROM $1:name WHERE $2:name IS NULL', ['mytable', req.params.name]);
                  return {data, numOfNulls};
               });
               res.status(200).send(result));
            });
       } catch(err) {
            console.log(err);
       }
    



    1. 天気アプリのデータモデル

    2. SQL:デバイスセットごとに同じ値が連続して出現するすべてのレコードをカウントし、最大のカウントを返します

    3. PDOは最後に挿入されたIDを取得します

    4. 配列をテーブルに格納する方法は?