我有一个数据库,包含圣经中的经文,包含以下字段: 书(书号),章节(章节号),诗句(诗句号),文字(诗句)
例子:1 1 1起初,上帝创造了天地。
第一个用于 Genesis ,第二个用于第一章,第三个用于第一个
用户给我一些像1 1:1 - 1 1:4这意味着他想要显示创世纪1:1-4。
我想做的事情就像是SELECT (book*1000000+chapter*1000+verse AS index) FROM bible WHERE index >= 1001001 AND index <=1001004
或者WHERE book*1000000+chapter*1000+verse >= 1001001 AND book*1000000+chapter*1000+verse <= 1001004
答案 0 :(得分:1)
我建议单列“索引”,但不是每次为查询计算它(执行速度慢1000倍),而是从公式“book * 1000000 + chapter * 1000 + verse”执行一次性填充。
UPDATE bible
SET index = book * 1000000 + chapter * 1000 + verse
假设您在表单中有控件选择书籍,章节和诗句,包括开头和结尾。然后,您将构建过滤器
SELECT index, verse
FROM bible
WHERE index >=
Forms!f!startBook * 1000000 + Forms!f!startChapter + 1000 + Forms!f!startVerse
AND index <=
Forms!f!endBook * 1000000 + Forms!f!endChapter + 1000 + Forms!f!Verse
如果每次都必须使用计算出的列(我有超过1毫秒的时间),那么
SELECT index_, verse
FROM (select book * 1000000 + chapter * 1000 + verse as index_, * from bible) B
WHERE index_ >= 1 AND index_ <= 2
这两个?是参数的ASP命令占位符。使用相同的公式预先计算索引
startIndex = Request("sbook") * 1000000 + Request("schapter") * 1000 + Request("sverse")
答案 1 :(得分:0)
这有效: SELECT text FROM bible WHERE book * 1000000 + chapter * 1000 + verse&gt; =“&amp; from&amp;”AND book * 1000000 + chapter * 1000 + verse&lt; =“&amp; last