javascript - 如何从 mysql 中的 JSON 字段和当前的 value 中选择数据?

我有 table 像这样调用employee_hashtags:

+----+---------+---------------+
| id | emp_id  |  hashtag_ids  |
+----+---------+---------------+
|  1 |   1     |  [1, 4, 5]    |
+----+---------+---------------+

我想查询 hashtag_ids 在哪里有我想搜索的 value 。这是成功的,但是 hashtag_ids 上的结果包含该字段中的所有 value 。

这是我的结果:

[
   {
        "emp_id": 1,
        "hashtag_ids": [
            1,
            4
        ],
        "user": {
            "emp_full_name": "Agam",
            "emp_email": "agamtheos@gmail.com",
            "emp_phone_no": null,
            "preferred_work_type": null
        },
        "hashtag": []
    }
]

问题是 hashtag 字段找不到 value 因为 hashtag_ids 在数组中。

这是我预期的结果:

[
   {
        "emp_id": 1,
        "hashtag_ids": 1,
        "user": {
            "emp_full_name": "Agam",
            "emp_email": "agamtheos@gmail.com",
            "emp_phone_no": null,
            "preferred_work_type": null
        },
        "hashtag": {
            "name": "NodeJs"
        }
   }
]

这是我的查询,我在这里使用 sequelize :

let employeeHashtagQuery = 1
const users = await EmployeeHashtag.findAll({
        attributes: ['emp_id', 'hashtag_ids'],
        where: Sequelize.fn('JSON_CONTAINS', Sequelize.col('hashtag_ids'), Sequelize.cast(`${employeeHashtagQuery}`, 'CHAR CHARACTER SET utf8')),
        limit: parseInt(limit),
        offset: (page - 1) * limit,
        include: [
          {
            model: UserEmployee,
            as: 'user',
            attributes: ['emp_full_name', 'emp_email', 'emp_phone_no', 'preferred_work_type']
          },
          {
            model: Hashtag,
            as: 'hashtag',
            attributes: ['id', 'name', 'hashtag_group_id']
          }
        ]
      })

这可以解决吗?

如果还不够,请告诉我您是否需要更多信息

回答1

对 value 的匹配数组使用 IN 运算符

SELECT * FROM EmployeeHashtag WHERE hashtag_ids IN ('4','3')

回答2

更改您的员工标签映射 id to id 映射而不是 id 到数组映射。你的 table 应该是这样的:

+----+---------+---------------+
| id | emp_id  |  hashtag_ids  |
+----+---------+---------------+
|  1 |   1     |       1       |
+----+---------+---------------+
|  1 |   1     |       4       |
+----+---------+---------------+

然后使用您在上面使用的 sequelize 关联。

否则,您必须自己循环遍历数组以创建所需的对象。

相似文章