У меня есть таблица с 2 датами - ADDDATE и UPDATEDATE.
Когда объект добавляется, ADDDATE является текущей датой, и UPDATEDATE 0000-00-00.
Я должен ORDER BY
команда SQL и получает лучшую дату тех 2.
Например, если ADD=12/1/2010 и UPDATE=30/6/2010, ДАТА ОБНОВЛЕНИЯ является лучше всего (новейшей).
Совет?
Используйте GREATEST для поиска самой новой даты:
ORDER BY GREATEST(UPDATEDATE, ADDDATE)
ORDER BY IF(UPDATEDATE > ADDDATE, UPDATEDATE, ADDDATE)
Если вы хотите сделать свою базу данных масштабируемой, лучшим подходом будет добавление нового столбца LATESTDATE
вместе с триггером вставки / обновления, который устанавливает для него самое последнее из двух полей-кандидатов, используя для например, наибольшее .
Выполнение построчных функций для выбранных вами элементов очень быстро замедляется по мере увеличения размера таблицы. Если вы хотите, чтобы производительность оставалась работоспособной по мере роста таблицы, этот трюк является обычным.
Технически это нарушает 3NF, поскольку дублирует одну из дат, но нарушение допустимо по соображениям производительности, и вы по-прежнему поддерживаете свойства ACID, потому что триггеры требуют, чтобы столбцы оставались согласованными.
Я не знаю синтаксис триггеров MySQL, но я бы сделал что-то вроде:
update TBL set ADDDATE = ADDDATE
, чтобы триггер сработал для всех текущих строк. Преимущество этого решения заключается в том, что оно переносит стоимость вычислений на время изменения данных , не каждый раз, когда вы запрашиваете базу данных. Это снижает стоимость всех операций чтения, делая его более эффективным (если только вы не относитесь к тем очень редким зверям, у которых таблица пишется чаще, чем читается).
Имейте в виду, что в этом может не быть необходимости, если размер вашей таблицы относительно невелик - я работаю в среде, где таблицы действительно огромны.