Как хранить возраст в SQL с помощью PHP [duplicate]

Если вы получаете это сообщение во время сохранения или компиляции сборки, просто закройте все файлы, а затем откройте любой файл для компиляции и сохранения.

Для меня причина в том, что я переименовал файл, и старый файл все еще был открыт.

4
задан ProgrammerGirl 20 March 2012 в 16:16
поделиться

5 ответов

Простой ответ: нет; никогда не хранят возраст людей. Он меняется для каждого человека ежегодно, но, как вы говорите, вы должны проверить, что он правильный для каждого человека ежедневно.

Сохранять только дату рождения, а затем вычислять возраст при выборе из базы данных.

EDIT:

Чтобы развернуть мой комментарий в ответе ManseUK , есть также возможность сбоя , Что произойдет, если ваш сервер / база данных не работает? Или ваше обновление не запускается в указанное время? Или кто-то приходит и запускает его вручную после того, как обновление уже было запущено на эту дату? Или кто-то отключает ваш планировщик? Нет никакой опасности, если это произойдет, если вы выберете Age при выборе из базы данных.

Чтобы выбрать, где возраст составляет от 25 до 30 лет, и при условии, что столбец DATE dateofbirth, ваш запрос будет чем-то вроде :

select *
  from users
 where dateofbirth between date_add( curdate(), interval -30 year )
                       and date_add( curdate(), interval -25 year )

Убедитесь, что users проиндексирован на dateofbirth.

13
ответ дан Community 24 August 2018 в 19:19
поделиться

Я собираюсь пойти против большинства всех ответов здесь.

Я бы сохранил оба ...

  • обновление возраста быстро и просто - один mysql-запрос может запускаться каждый день, и его выполнение
  • вычисление возраста занимает много времени, когда у вас много просмотров страниц - количество раз его просмотренных намного превышает количество изменений

Представьте себе табличный сценарий - таблицу со 100 или 1000 строками, которая показывает возраст человека ... сколько времени это займет, чтобы вычислить ???

Я всегда думал, что вычисление Stackoverflow репутацию динамически, но вы можете увидеть в Stackoverflow data explorer , что они не видят - объект User в схеме справа. Он записывался и обновлялся каждый раз, когда он менялся - я бы предположил, что это происходит исключительно из-за того, что количество просмотренных событий намного превышает количество изменений

0
ответ дан ManseUK 24 August 2018 в 19:19
поделиться

Я не думаю, что абсолютно верно, что вычислительный возраст динамически занимает много памяти. Почему бы не создать таблицу CALENDAR с 365 рядами по 1 строке для каждого дня года. И сохраните список идентификаторов пользователя в день, соответствующий их дню рождения. Для каждого дня просто указывайте запись в таблице за этот день и обновляйте возраст только тех, кто выбран. Это значительно уменьшит сложность, даже когда увеличивается пользовательская база.

0
ответ дан nanospeck 24 August 2018 в 19:19
поделиться

Нет, не храните возраст, просто вычислите его в своих запросах. Что касается дня рождения, я предпочитаю иметь все свои даты / время в timestamps unix (потому что мне не нравится иметь дело с переносимостью в настройках локали, изменяющих формат даты)

3
ответ дан scibuff 24 August 2018 в 19:19
поделиться

Имеет ли смысл хранить Age

No.

Мне не нужно вычислять каждый возраст на

На самом деле вы потратили бы на миллион больше «ресурсов ЦП» (о которых вы слишком расплывчаты, чтобы беспокоиться) с вашим ежедневный подход к обновлению.

Есть ли лучший способ сделать все это?

Сохранить дату рождения и рассчитать возраст в определенное время

что, если вы хотите узнать все те, чей возраст больше 25, но меньше 30?

, это довольно тривиальный запрос, подобный этому

WHERE birth_date BETWEEN date_sub(curdate(), INTERVAL 25 YEAR) 
                     AND date_sub(curdate(), INTERVAL 30 YEAR)

запрос будет использовать индекс (если он есть) и, таким образом, будет быстро сверяться, без каких-либо [ненужных] денормализаций

2
ответ дан Your Common Sense 24 August 2018 в 19:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: