2016-08-12 194 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

    你已經複製我的答案。甚至沒有改變年齡限制大聲笑 –