问题描述
一个简单的场景:
fruit表(A喜欢吃苹果和香蕉,B喜欢苹果,C喜欢苹果、香蕉、橘子、猕猴桃,D喜欢猕猴桃)
name | fruits |
---|---|
A | 1,2 |
B | 1 |
C | 1,2,3,4 |
D | 4 |
现在想查出来喜欢苹果的有多少人,喜欢香蕉的有多少人,喜欢橘子的有多少人,喜欢猕猴桃有多少人,并且把这个数据拼装成一个数组形式返回。
问题出现的环境背景及自己尝试过哪些方法
目前用SQL查已经可以查出来了:
select sum(find_in_set('1', fruits) > 0) as ‘苹果’,
sum(find_in_set('2', fruits) > 0) as ‘香蕉’,
sum(find_in_set('3', fruits) > 0) as ‘橘子’,
sum(find_in_set(‘4’, fruits) > 0) as ‘猕猴桃’ from `fruit`
但是项目里用的是Sequelize ORM语法,初接触不太会,麻烦各位大神帮忙看看,Sequelize要怎么写呀?
相关代码
我现在用Sequelize只会写单个查询,所以想出了一个办法,就是通过for循环,效果已经实现了,但是这么写感觉很不规范
const fruits = [
{
label: ‘苹果‘,
value: 1,
number: 0, // 有几个人喜欢苹果
},
{
label: ‘香蕉’,
value: 2,
number: 0,
},
{
label: ‘橘子‘,
value: 3,
number: 0,
},
{
label: ‘猕猴桃‘,
value: 4,
number: 0,
}
]
for (let i = 0; i <fruits.length; i++) {
const item =
(await fruitsService.findAllWithOptions({
where: sequelize.where(
sequelize.fn(
'FIND_IN_SET',
fruits[i].value,
sequelize.col('fruits'),
),
'>',
'0',
),
})) || [];
fruits[i].number = item.count;
}
return fruits;
你期待的结果是什么?实际看到的错误信息又是什么?
我期待能实现查询出每个水果喜欢的人数,并返回数组形式,因为实际场景是要做统计图表。
第一种写法:直接使用
query
查询原生sql
sql 就是你的写的那些sql
第二种写法:
ORM
试试看下能不能拿到你想要的结果