有没有办法获得超过 1 个值?
Posted
技术标签:
【中文标题】有没有办法获得超过 1 个值?【英文标题】:Is there a way to get more than 1 value using? 【发布时间】:2020-12-05 09:11:03 【问题描述】:我有一个better-sqlite3
语句对我的数据库进行排序和排名,我有一个IN
语句,所以我可以选择多于1 行。这就是我遇到问题的地方,我需要根据 ID 的动态数组获取多行。
我的 SQLITE 语句如下所示:
Table.prepare('SELECT *, RANK () OVER (ORDER BY amount DESC) rank FROM table WHERE user IN(?)');
我试着从这个陈述中得到这样的东西:
getAll.get(['1','2','3']);
getAll.get('6,9,4');
getAll.get('7','5','8');
我收到一个错误:
RangeError: Too many parameter values were provided
如何在不知道数组长度的情况下选择多个值(所以?,?
不会削减它),并允许尽可能多的值?我使用了?*
,但出现语法错误。
我将better-sqlite3
用于Node.JS
【问题讨论】:
【参考方案1】:使用运算符LIKE
,而不是IN
:
SELECT *, RANK () OVER (ORDER BY amount DESC) rank
FROM table
WHERE ',' || ? || ',' LIKE '%,' || user || ',%'
并将列表作为 1 串逗号分隔值(不带空格)传递:
all('6,9,4');
【讨论】:
这只返回我认为的第一个结果?我正在使用better-sqlite3
,但我没有得到任何类似数组的东西,我只有一行。
如果您传递字符串 '6,9,4',此查询将返回用户为 6 或 9 或 4 的所有行。对于更好的sqlite3代码,我不确定,我使用了你的 getAll() 代码,这是唯一适合这种情况的代码,因为它只传递了 1 个字符串。
@SomePerson 来自all()
的文档:类似于 .get(),但不会只检索一行,而是会检索所有匹配的行。返回值是一个行对象数组。 所以使用all()
而不是get()
。以上是关于有没有办法获得超过 1 个值?的主要内容,如果未能解决你的问题,请参考以下文章
SQL:如何每天选择多条记录,假设每天包含超过1个值,MySQL
[如何获得比数组javascript其他元素大的3个值] [