【发布时间】:2012-01-11 06:23:02
【问题描述】:
为了创建过滤器下拉列表,我需要找出 mysql 表中的第一个和最后一个日期。我指的是一个包含日期的字段。
我的第一个想法是运行查询以提取所有记录,然后在 php 中执行一些逻辑来查找第一个和最后一个日期。
任何更好的建议.. 一旦有一个庞大的数据集,我的解决方案似乎效率很低。
【问题讨论】:
为了创建过滤器下拉列表,我需要找出 mysql 表中的第一个和最后一个日期。我指的是一个包含日期的字段。
我的第一个想法是运行查询以提取所有记录,然后在 php 中执行一些逻辑来查找第一个和最后一个日期。
任何更好的建议.. 一旦有一个庞大的数据集,我的解决方案似乎效率很低。
【问题讨论】:
最小日期:
select date_field from table order by date_field asc limit 1;
最大日期:
select date_field from table order by date_field desc limit 1;
两者:
select min(date_field),max(date_field) from table;
【讨论】:
永远不要提取所有记录!为此使用 SQL:
SELECT your_time_column FROM your_table ORDER BY your_time_column ASC LIMIT 1
和
SELECT your_time_column FROM your_table ORDER BY your_time_column DESC LIMIT 1
或
SELECT MAX(your_time_column), MIN(your_time_column) FROM your_table
【讨论】:
这个怎么样?
SELECT MAX(`date`), MIN(`date`)
FROM your_table;
date 上的索引会有所帮助。
【讨论】:
使用 mysql min() 和 max() 选择第一个和最后一个日期
select min(date),max(date) from table;
【讨论】:
实际上,如果您在 php 中按日期SELECT * FROM table_name ORDER BY date 排序查询,您可以轻松获取第一个和最后一个日期:
第一:$first_date = reset($result);
最后:$last_date = end($result);
【讨论】:
您可以进行 2 个查询(第一个日期为 1 个,最后一个日期为 1 个)并将它们合并。
(SELECT the_date FROM table ORDER BY the_date ACS LIMIT 1)
UNION
(SELECT the_date FROM table ORDER BY the_date DESC LIMIT 1)
【讨论】: