выбор диапазона стихов из базы данных - PullRequest
0 голосов
/ 17 января 2011

У меня есть база данных со стихами из Библии, с такими полями: книга (номер книги), глава (номер главы), стих (номер стиха), текст (стих)

Пример: 1 1 1 В начале Бог сотворил небо и землю.
первый 1 для Бытие , второй 1 для глава 1 , третий 1 этодля стих 1

пользователь дает мне что-то вроде 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

Ответы [ 2 ]

1 голос
/ 17 января 2011

Я бы предложил один столбец «индекс», но вместо того, чтобы вычислять его каждый раз для запроса (который выполняется в 1000 раз медленнее), выполните одноразовое заполнение по формуле «книга * 1000000 + глава * 1000 + стих» .

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")
0 голосов
/ 17 января 2011

это работает: ВЫБЕРИТЕ текст из Библии, ГДЕ книга * 1000000 + глава * 1000 + стих> = "& от &" И книга * 1000000 + глава * 1000 + стих <= "& последняя </p>

...