steve mtangoo wrote:
> Hi Igor,
> would you explain what are bookLow and chapterHigh?
> Do you mean lowest book and highest chapter?

:bookLow and :chapterHigh are place holders for numbers you will 
provide. Those numbers stand for the lowest numbered book and the 
highest numbered chapter between which you want to search.


>
> I want to test this query but please help me to understand it.
> select * from Bible where
> (book>  :bookLow or (book=:bookLow and (chapter>:chapterLow or
> (chapter=:chapterLow and verse>=:verseLow)
> and
> (book<  :bookHigh or (book=:bookHigh and (chapter<:chapterHigh or
> (chapter=:chapterHigh and verse<=:verseHigh);
>
> And thanks to everybody who is helping here!
>
> On Mon, Dec 13, 2010 at 5:13 PM, Igor Tandetnik<itandet...@mvps.org>  wrote:
>
>> steve mtangoo<mwinjili...@gmail.com>  wrote:
>>> I have a  script that is supposed to query the Bible scriptures between
>> two
>>> intervals. My table is named Bible and have columns: ID (int), Book
>> (int),
>>> Chapter(int), Verse (int) and Scripture(text).
>>>
>>> Now the books are unique i.e. 1-66 but chapters keep repeating, and so do
>>> verses. Now suppose I want to get scripture between book 1 chapter 1
>> verse 1
>>> and book 2 chapter 3 Verse 1, how do I go about? My knowledge of SQLite3
>>> have taken me to a dead end!
>> Here's a straighforward answer:
>>
>> select * from Bible where
>> (book>  :bookLow or (book=:bookLow and (chapter>:chapterLow or
>> (chapter=:chapterLow and verse>=:verseLow)
>> and
>> (book<  :bookHigh or (book=:bookHigh and (chapter<:chapterHigh or
>> (chapter=:chapterHigh and verse<=:verseHigh);
>>
>> Here's a trick to make it shorter:
>>
>> select * from Bible where
>> book*1000000 + chapter*1000 + verse between
>>     :bookLow*1000000 + :chapterLow*1000 + :verseLow
>> and
>>     :bookHigh*1000000 + :chapterHigh*1000 + :verseHigh;
>>
>> Basically, the idea is to assign each verse a unique number (the query
>> above assumes there are no more than 1000 verses per chapter and chapters
>> per book; adjust multipliers if there are more). You may want to consider
>> working with such sequential numbers internally in your program, converting
>> between them and (book, chapter, verse) format on input/output only. So,
>> define your table as Bible(VerseNumber integer primary key, Scripture text),
>> and the query becomes simply
>>
>> select * from Bible where VerseNumber between :VerseLow and :VerseHigh;
>>
>> --
>> Igor Tandetnik
>>
>> _______________________________________________
>> sqlite-users mailing list
>> sqlite-users@sqlite.org
>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users



-- 
Puneet Kishor http://punkish.org
Carbon Model http://carbonmodel.org
Charter Member, Open Source Geospatial Foundation http://www.osgeo.org
Science Fellow http://creativecommons.org/about/people/fellows#puneetkishor
Nelson Institute, UW-Madison http://www.nelson.wisc.edu
---------------------------------------------------------------------------
Assertions are politics; backing up assertions with evidence is science
===========================================================================
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to