2011-01-15 28 views
1

私はこれ以上の髪を失っています。私は同様の問題でいくつかのオンラインスレッドを見つけましたが、正確には私が走っているものではありませんので、まだ少し詰まっています。私は私の年齢のテーブルでは、非常に複雑なクエリ(少なくとも私にとってはその複雑な:))2つの年齢フィールドに基づいたMySQLの年齢範囲クエリ

を書いています

、私はage_startとage_endフィールドを持っています。例えば

age_start | age_end 
------------------------ 
0  - 64 
19  -  23 
0  -  19 
25  -  29 
65  -  100 
... 

そして、何私が達成しようとしているが、これらの範囲の間で読み込むクエリです。

私がこれまでに配列の値として設定し、これらの二つのフィールドを持っている、と私のMySQLのクエリでのようなものですが出ている最高:

は年齢を入力してください。[33]

はに年齢データを取得します配列。そして、のようなクエリ:戻ってくる

...WHERE $age >= $age_start AND age <= $age_end... 

age_start | age_end 
------------------------ 
0  -  64 
25  - 29 

誰もが任意のアイデアや提案またはこれにより良い方法がありますか?

+0

方法33は、25と29の間とすることができます? – zerkms

+1

29歳のときには... –

+0

29は嘘つきです。私の悪い:) – OldWest

答えて

2
SELECT * 
    FROM ages 
WHERE 32 BETWEEN age_start AND age_end 
+0

私はそれが好きです。ずっと簡単なアプローチ。 – OldWest

-1
SELECT 
         CASE 
          WHEN age < 13 THEN 'Under 13' 
          WHEN age BETWEEN 13 and 15 THEN '13 - 15' 
          WHEN age BETWEEN 16 and 20 THEN '16 - 20' 
          WHEN age BETWEEN 21 and 25 THEN '21 - 25' 
          WHEN age BETWEEN 26 and 30 THEN '26 - 30' 
          WHEN age BETWEEN 31 and 35 THEN '31 - 35' 
          WHEN age BETWEEN 36 and 40 THEN '36 - 40' 
          WHEN age BETWEEN 41 and 45 THEN '41 - 45' 
          WHEN age BETWEEN 46 and 50 THEN '46 - 50' 
          WHEN age BETWEEN 51 and 55 THEN '51 - 55' 
          WHEN age BETWEEN 51 and 55 THEN '56 - 60' 
          WHEN age BETWEEN 51 and 55 THEN '61 - 65' 
          WHEN age BETWEEN 51 and 55 THEN '66 - 70' 
          WHEN age BETWEEN 51 and 55 THEN '71 - 75' 
          WHEN age BETWEEN 51 and 55 THEN '76 - 80' 
          WHEN age BETWEEN 51 and 55 THEN '81 - 85' 
          WHEN age BETWEEN 51 and 55 THEN '86 - 90' 
          WHEN age BETWEEN 51 and 55 THEN '91 - 95' 
          WHEN age BETWEEN 51 and 55 THEN '96 - 100' 
          WHEN age >= 100 THEN 'Over 100' 
          WHEN age IS NULL THEN 'Not Filled In (NULL)' 
         END as age_range, 
         COUNT(ids) AS age_count,group_concat(ids) as chart_ids 

         FROM (SELECT 
           TIMESTAMPDIFF(YEAR, `TABLE_FIELD_OF_DATE_OF_BIRTH`, CURDATE()) AS age, user_id as ids 
          FROM 
           jw_user 
          WHERE 
           is_active=1 
          AND 
           is_deleted = 0 
         ) as derived 

        GROUP BY age_range 

        ORDER BY age_range 

と素晴らしいだろう:)

+0

「BETWEEN 51および55」の後にフィルターを変更するのを忘れた – Kermit

関連する問題