Возрастной запрос в MySQL на основе двух возрастных полей - PullRequest
1 голос
/ 15 января 2011

Я теряю волосы из-за этого.Я обнаружил несколько онлайн-тем с похожей проблемой, но не совсем то, с чем сталкиваюсь, поэтому я все еще немного застрял.

Я пишу очень сложный запрос (по крайней мере, его сложность для меня :))

В моей таблице возрастов у меня есть поля 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

У кого-нибудь есть какие-либо идеи или предложения или лучший подход к этому?

Ответы [ 2 ]

2 голосов
/ 15 января 2011
SELECT *
  FROM ages
 WHERE 32 BETWEEN age_start AND age_end
0 голосов
/ 29 мая 2013
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

и это было бы удивительно :) 1002 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...