хранение дат в MySQL - PullRequest
       4

хранение дат в MySQL

0 голосов
/ 28 марта 2011

Лучше ли хранить даты в mysql в трех столбцах или использовать только один столбец.Какой из них быстрее.Кроме того, если я просто хочу сделать вставки с текущей датой в формате дд / мм / гг, как мне это сделать.а также как мне выбрать с этим.Также, скажем, если я хотел бы получить результаты для всех сред, как мне это сделать, или, скажем, одну дату 25-го числа всех месяцев и лет, как мне это сделать.

Спасибо, люди.

Я использую PHP с Apache и Mysql.

Каковы недостатки использования структуры, которую я предлагаю.Я могу легко получить все 25 числа, используя таблицу дат, и я могу получить все дни, используя другой столбец для дней.Какая разница в скорости между моим предложенным решением и таблицей ДАТА?

Ответы [ 3 ]

5 голосов
/ 28 марта 2011

Вы можете использовать правильный тип столбца, например DATE, DATETIME или TIMESTAMP, в зависимости от ваших потребностей. Они созданы специально для обработки дат и могут более легко выполнять другие функции (добавление, сравнение и т. Д.), Которые будет трудно выполнить в 3 отдельных столбцах.

Читайте это для получения дополнительной информации.

DAYOFWEEK(date) даст вам числовое представление для дня. В вашем случае 4 = среда. DAYOFMONTH(date) будет работать, чтобы найти все 25 числа месяца.

DAYNAME(date) вернет название дня недели для даты

2 голосов
/ 29 марта 2011

Кроме того, если я просто хочу сделать вставки с текущей датой в формате дд / мм / гг, как мне это сделать.

Well it depends on the format your date is passed in through your 
form but you are going to want to store your date in YYYY-mm-dd format.

INSERT INTO my_table (timefieldname) VALUES ( '$date' );

, а также как мне выбрать с этим.

SELECT timefieldname FROM my_table;

//or you can format the date - this will give you month/day/year 01/01/2012
SELECT DATE_FORMAT(timefieldname, '%m/%d/%Y') FROM my_table;

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

SELECT timefieldname FROM my_table WHERE DAYNAME(timefieldname) = 'Wednesday';

Как мне это сделать или, скажем, одну дату 25-го числа всех месяцев и леткак мне это сделать.

SELECT timefieldname FROM my_table WHERE DAY(timefieldname) = '25'; 
0 голосов
/ 28 марта 2011

Вы можете освободить от необходимости передавать даты из вашей кодовой базы и позволить mysql вставлять их для вас, при условии, что они являются временными отметками:

ALTER TABLE tablename ADD `timefieldname` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...