2016-08-12 196 views
1

为我提供心灵燃烧查询。 我想获取两个年龄条件之间的所有记录。任何人都请帮助我。我的查询是下面写选择查询 - 获取两个年龄最小和最大年龄之间的所有数据

SELECT tbl_trip.* FROM tbl_trip WHERE ((tbl_trip.minage >= '15' AND tbl_trip.maxage <= '15') OR (tbl_trip.maxage <= '28' AND tbl_trip.minage >= '28')) 

在此查询我想从数据库中的所有记录..其中15至28岁的谎言。在这个所有的乐曲中,例如,最大值:1至16,12至30,16至24,27至28但不是像3至13或29或100。提前致谢。

+0

你的逻辑是很清楚。请编辑您现有的问题。放置适用栏的一些样本数据,然后显示您想要的预期输出的样本。另一个年龄细分样本,我在http://stackoverflow.com/questions/10154058/mysql-group-by-multiple-rows/10154196#10154196,不知道这是否可以澄清样本数据和期望的输出。 – DRapp

+0

正如你给的例如http://stackoverflow.com/questions/10154058/mysql-group-by-multiple-rows/10154196#10154196。它不适合我。我已经测试过了。正如我的问题,我希望年龄范围从14到28的所有记录。 。在这个范围1到16,12到30,16到24,27到28但是没有像3到13或29或100(Becoz没有年龄谎言在我的范围之间)@DRapp –

+0

再次,请编辑您的问题。显示您的样本现有数据,可显示单个记录的任何年龄差异,然后根据您提供的样本数据显示最终返回结果集的内容。你的年龄范围相互重叠,没有意义,如1到16,然后12到30 ...在这种情况下,为什么你包括12-30,如果不是17-30,因为1-16已经覆盖了无论如何12-16?因此,没有上下文数据的情况下,您的问题会出现混淆/缺乏明确性。 – DRapp

回答

1

该查询将检查您的给定范围介于最小值和最大值之间,反之亦然。

select * from tbl_trip 
where (((minage>=15 and minage<=22) or (maxage>=15 and maxage<=22)) 
or((15>=minage and 15<=maxage) or (22<=maxage and 22>=minage))) 

这也是工作,请检查一下你使用之前正确:

select * from tbl_trip 
where ((minage>=12 and minage<=22) or (maxage>=12 and maxage<=22)) 
     or ((12>=minage and 22<=maxage)) 

这里是另一种方式

select * from tbl_trip 
Where GREATEST(GREATEST(minage,12)-LEAST(maxage,22),0)=0 
+0

感谢您的回答。我会在一段时间内给予反馈。 –

+2

select * from tbl_trip GREATEST(GREATEST(minage,12)-LEAST(maxage,22),0)= 0此查询对我来说工作正常..亲爱的@rohit –

2

据我所知,你需要把所有来自DB的记录 - 最大范围与给定范围相交的记录。下文给定的范围将是从X到Y,行的范围将是从A到B.显然,Y> X,B> A.

存在其中这些范围跨越三种情况:

  • A- -B完全位于X-Y内部。这意味着,上的数字线,这些数字位于这样的:A,X - Y,B.因此,条件是

    甲< = X B> = Y

  • A - B在X - Y上的左侧侧大体穿过X - Y。上的数字线,这些数字是这样的:A,X,B,Y。因此,条件是

    甲< = X X < = B 乙< = Y

  • 相同的A - B穿越X - Y的范围就可以了右边方。数字线:X,A,Y,B条件:

    X < = A 甲< = Y ÿ< = B

  • 总之,最终条件是:

    (A < = X & & B> = Y)|| (A < = X & & X < = B & &乙< = Y)|| (X < = A & &一个< = Y & &Ÿ< = B)

    +0

    感谢您的回答。请通过查询来解释它。 –

    2

    尝试使用它,它的工作对我罚款

    select * from tbl_trip 
    Where GREATEST(GREATEST(minage,12)-LEAST(maxage,22),0)=0 
    
    3

    这是正确的方式罗希特写了一个令人困惑的查询。

    select * from tbl_trip where ((minage>=12 and minage<=22) or (maxage>=12 and maxage<=22)) or ((minage<=12 and maxage>=22)) 
    

    感谢

    +0

    你已经复制我的答案。甚至没有改变年龄限制大声笑 –