Количество клиентов определенного возраста

Gfdadf

Новичок
Добрый день!
Подскажите, пожалуйста. Голова уже кипит.
Есть таблица profiles с полями id и date_of_birth.
date_of_birth - дата в формате "ГГГГ-ММ-ДД"
Нужно вывести таблицу в которой будет отображаться количество клиетов по возрасту.
15 лет - 6 шт
16 лет - 3 шт
и тд

Вот до чего я пока доковырялся.
PHP:
$query = "SELECT id, date_of_birth FROM profiles WHERE date_of_birth IS NOT NULL OR date_of_birth != '000-00-00'  GROUP BY date_of_birth";
    $query = mysql_query($query);//получил список дат без повторов
echo "<table border = '1'>";
    while ($row = mysql_fetch_array($query))
    {
        $query1 = "SELECT id FROM profiles WHERE date_of_birth = '".$row['date_of_birth']."'";
        $count_query = mysql_query($query1);//в цикле прогоняю каждую дату
        $num_rows = mysql_num_rows( $count_query );//и подсчитываю сколько таких записей у меня есть
       
        echo "<tr><td>".calculate_age($row['date_of_birth'])."</td><td>".$row['date_of_birth']."</td><td>".$num_rows."</td></tr>";//возраст - дата рождения - количество
    }
    echo "</table>";
Но это не то что мне нужно. Забурился до жути... и что-то мне подсказывает, что я не так и не туда копаю.
PHP:
function calculate_age($birthday) {
  $birthday_timestamp = strtotime($birthday);
  $age = date('Y') - date('Y', $birthday_timestamp);
  if (date('md', $birthday_timestamp) > date('md')) {
    $age--;
  }
  return $age;
}
 

Andkorol

Новичок
Не выдумывай – вычисляй возраст и количество прямо в запросе.
Гугли mysql calculate age
 
Последнее редактирование:

Gfdadf

Новичок
Не выдумывай – вычисляй возраст и количество прямо в запросе.
Гугли mysql calculate age
Спасибо большущее за совет!
Удалось нарыть и подстроить под себя . Вроде выдает то, что нужно:)
Если можно, проверьте, верно ли.
Код:
SELECT TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) AS age ,COUNT(*) from profiles WHERE date_of_birth != '000-00-00' group by age;
 

Andkorol

Новичок
Я бы использовал что-то вроде:
Код:
SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), `date_of_birth`)), '%Y')+0 AS `age`, COUNT(`id`) AS `cnt` 
FROM `profiles` 
GROUP BY `age` 
ORDER BY `age`;
 

AnrDaemon

Продвинутый новичок
Вместо '0000-00-00' (у вас кстати неверное количество нулей в коде запроса, да) можно использовать просто 0.
 
Сверху