Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
3 / 3 / 3
Регистрация: 15.12.2011
Сообщений: 160
1

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

19.05.2016, 17:58. Показов 522. Ответов 7
Метки нет (Все метки)

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

Вот до чего я пока доковырялся.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
    $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
1
2
3
4
5
6
7
8
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;
}
Заранее спасибо за помощь!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2016, 17:58
Ответы с готовыми решениями:

Отобразить на карте количество клиентов по списку город-количество клиентов
У меня есть список количества клиентов компании, разбитый по городам. Например: Москва: 100,...

Как подсчитать сколько человек, определенного возраста
Как мне подсчитать сколько человек, определенного возраста? Допустим, мне нужны люди, которым 18...

Определить, сколько клиентов пользуются услугами определенного банка
1. Создать массив записей в соответствии с заданной структурой. Количество записей не больше 10....

Определить количество дней для определенного месяца и определенного года
Составить программу, которая по заданным году и номеру месяца m определяет количество дней в этом...

7
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
20.05.2016, 11:29 2
Чёт не понятно, что надо. По первой части кода можно сказать, что она наверное должна подсчитывать количество всех id для каждой даты, да? Там вроде такая задумка, но её можно проще записать.
1
3 / 3 / 3
Регистрация: 15.12.2011
Сообщений: 160
20.05.2016, 11:34  [ТС] 3
Ну, это просто попытки достигнуть результат) Но, не в ту степь пошел)

Нужно вывести список следующего вида
Клиенты с возрастом 15 лет - 6 шт
16 лет - 3 шт
17 - 5
и так всех.

Мой код выводит не то что нужно. Он выводит количество клиентов у которых одна и та же дата рождения. А нужно просто подсчитать возраст каждого клиента и посчитать количество клиентов в той или иной возрастной группе.
0
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
20.05.2016, 12:11 4
Создай один запрос к таблице, из неё выбери дату (обработанную функцией DATE_FORMAT) и count айди,
и сгруппируй по обработанной дате и всё получится.
1
3 / 3 / 3
Регистрация: 15.12.2011
Сообщений: 160
20.05.2016, 14:26  [ТС] 5
Да, но это будет количество клиентов по датам рождения. 01.05.1980 - 1 чел, 02.05.1980 - 5 чел и тд. А нужно по возрасту.
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
20.05.2016, 15:32 6
Разницу в годах можно вычислить как то типа этого
MySQL
1
2
SELECT YEAR(NOW()) - YEAR(date2)
    - (DATE_FORMAT(NOW(), '%m%d') < DATE_FORMAT(date2, '%m%d')) as diff_years FROM table
И сгруппировать
1
3 / 3 / 3
Регистрация: 15.12.2011
Сообщений: 160
20.05.2016, 15:52  [ТС] 7
Спасибо. Я тоже на нечто подобное вышел. Погуглил и вышел на вот такой код
PHP
1
$query = "SELECT TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) AS age ,COUNT(*) as count from profiles WHERE date_of_birth != '000-00-00'group by age";
0
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
20.05.2016, 15:56 8
SQL
1
2
3
"SELECT date_format(date_of_birth, '%Y') as Yours,
count(id) FROM profiles
GROUP BY Yours
0
20.05.2016, 15:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2016, 15:56
Помогаю со студенческими работами здесь

Вычисление возраста сотрудника и расчёт среднего возраста
Народ ПОМОГИТЕ пожалуйста!!! В Access не силён (на уровне пользователя). Имеется база данных с...

Ограничить количество попыток ввода возраста до 5
Написать программу, печатающую словесное описание возраста, введенного пользователем в виде целого...

Подсчитать количество людей одного возраста
Подщитать количество людей одного возроста 0-9 10-19 20-100 #include&lt;iostream&gt; using...

Вывести количество людей указанного возраста
#include &lt;iostream&gt; using namespace std; #include &lt;time.h&gt; int main() { int n; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru