有没有办法获得超过 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

每个月获得前 1 个值

[如何获得比数组javascript其他元素大的3个值] [

如何从 laravel 上的 1 个单选按钮获取 2 个值?

如何获得组中“中间”值的平均值?

通过 URL 每页获得更多搜索结果