gpt4 book ai didi

c# - 使用c#在sqlite表中分页

转载 作者:行者123 更新时间:2023-12-02 14:20:21 27 4
gpt4 key购买 nike

我正在尝试翻阅此表,因此我最终得到了此查询(该查询不起作用)。

SELECT MIN(user_uid) AS FIRST,
MAX(user_uid) AS LAST,
user_number, user_name
FROM user_table
WHERE user_uid > MAX(FIRST,{0}) AND user_uid < MIN(LAST,{1})
AND ( user_name LIKE '%{2}%' OR user_number LIKE '%{3}%' )
AND user_category={4} OR user_category={5}
ORDER BY user_uid LIMIT {6}

我从我的 C# 变量中获取参数值。我将 FIRST、LAST 存储在外部,以便使用它们移动到下一页/上一页。

我也创建了这个索引:

CREATE INDEX idx1 ON user_table (user_uid);

请注意:我看到this answer ,但这是我想获得第一个和最后一个值的唯一方法。

如何高效地对该表进行分页?

最佳答案

您的查询不起作用,因为 SQL 中的 Min(Column)Max(Column) 返回所有行的评估(聚合),因此不知道什么您的问题中非聚合查询中每一行的值。

如果您确实需要最小值和最大值,您可以在单独的 select 语句中返回它们,这样您的数据集就有 3 个表(如果您使用的是 ADO)。

但是分页通常应该实现using offset如下例所示(请注意,order by 应该使查询具有确定性,以便每次都返回相同的结果)。

SELECT
user_number,
user_name
FROM user_table
WHERE ( user_name LIKE '%{1}%' OR user_number LIKE '%{2}%' )
AND user_category={3} OR user_category={4}
ORDER BY user_uid LIMIT {5} OFFSET {6}

其中 {5} 是页面大小,{6}页码 * 页面大小

抱歉,如果这不能回答您的问题,则不清楚您想要 FIRST 和 LAST 的目的。页码和大小通常由 UI 跟踪。另外,我还没有在 SQLite 中测试上述内容。

注意

您在上面发布的代码看起来很容易受到 SQL injection 的攻击。如果您使用 String.Format() 之类的东西来构建查询。考虑改变这一点。

关于c# - 使用c#在sqlite表中分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25229655/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com