从MySQL数据库中选择复杂范围

时间:2015-10-04 11:17:51

标签: php mysql range

我试图从mysql数据库中选择一系列数据,这是我的数据库结构。

MySQL Database in phpMyAdmin

我试图选择这样的东西:Geneses(圣经的书1)和第1章至第3章21节(创世记1-3:23)。我已经正确解析了所有数据,但是,我似乎无法创建一个足够的SQL查询。

以下是我目前的语法,它仅从第1-3章中选择其中经文数字为< = 21.我需要它仅在到达最后一章时使用verse参数,而不应用{{1}到1到3之间的每一章。

verse <= 21

我将sql语句放入两个语句中,以便更清楚地了解我要完成的任务。我只想弄清楚如何(如果可能的话)结合这两个语句并仍然有相同的响应。现在我只查询两次然后合并结果。

SELECT `book`, `chapter`, `verse`, `text` 
from `bible` 
WHERE version = 'kjv' 
AND book = 1 
AND chapter >= 1            
AND ( chapter <= 3 AND verse <= 21 )

2 个答案:

答案 0 :(得分:2)

SELECT `book`, `chapter`, `verse`, `text` 
from `bible` 
WHERE version = 'kjv' 
AND book = 1 
AND 
(
  chapter in (1,2)
  OR (chapter = 3 AND verse <= 21)
)

答案 1 :(得分:-1)

我不完全确定这是否是你的意思,但希望如此:

select distinct
    `book`, `chapter`, `verse`, `text` 
    from `bible` 
    where (
            case
                when `chapter` < ( select max( `chapter` ) from `bible` where `book`=1 ) then
                    `version`='kjv' and `book`=1 and `chapter` in ( 1,2,3 )
                else
                    `version`='kjv' and `book`=1 and `chapter` in ( 1,2,3 ) and `verse` <= 21
            end
        );