date_of_birth BETWEEN '$age_from' AND '$to_age'
Заменим поля некоторыми значениями.
'2010-12-31' BETWEEN '18' AND '20'
Это бессмысленно, вы можете использовать
...
AND TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) BETWEEN '$age_from' AND '$to_age'
Например:
Схема (MySQL v5.7)
CREATE TABLE users (
`username` VARCHAR(4),
`gender` VARCHAR(1),
`date_of_birth` VARCHAR(10),
`country` VARCHAR(5)
);
INSERT INTO users
(`username`, `gender`, `date_of_birth`, `country`)
VALUES
('John', 'M', '2010-12-31', 'India'),
('Bing', 'M', '2000-12-31', 'Italy'),
('Rose', 'F', '2000-12-01', 'UK');
Запрос № 1
SELECT username,
date_of_birth,
TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) AS "age"
FROM users
WHERE (TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) BETWEEN '18' AND '20');
выход
| username | date_of_birth | age |
| -------- | ------------- | --- |
| Bing | 2000-12-31 | 18 |
| Rose | 2000-12-01 | 18 |
Запрос № 2
SELECT username,
date_of_birth,
TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) AS "age"
FROM users
WHERE (TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) BETWEEN '01' AND '10');
выход
| username | date_of_birth | age |
| -------- | ------------- | --- |
| John | 2010-12-31 | 8 |
Просмотр на БД Fiddle