【问题标题】:PHP / MySQL Query: Show results based on 2 conflicting conditionsPHP / MySQL 查询:根据 2 个冲突条件显示结果
【发布时间】:2013-01-02 21:57:59
【问题描述】:

我想做的是:在时间线上显示更新。

结果应显示 1 月 - 12 月 的更新,但同时根据年份列出这些月份。

一个视觉布局示例是:

  • 2011 年 1 月
  • 2011 年 2 月
  • 2011 年 5 月
  • 2011 年 6 月
  • 2011 年 7 月
  • 2011 年 9 月
  • 2011 年 11 月
  • 2011 年 12 月
  • 2012 年 1 月
  • 2012 年 2 月

等等等等……

如您所见,它回到了 2011 年结束时的 1 月。
我的查询遇到的问题是......

我只能这样排序我的结果:

  • 2011 年 1 月
  • 2012 年 1 月
  • 2011 年 2 月
  • 2012 年 2 月
  • 2011 年 5 月
  • 2011 年 6 月
  • 2011 年 7 月
  • 2011 年 9 月
  • 2011 年 11 月
  • 2011 年 12 月
$sql="SELECT * FROM (SELECT * FROM updates ORDER BY year ASC) AS the_id ORDER BY month ASC";

我不确定如何正确查询。一些指导将不胜感激,谢谢!

【问题讨论】:

  • 试试这个 - ORDER BY year, month 。希望这会解决它。

标签: php mysql sql


【解决方案1】:

您可以在 ORDER BY 子句中指定多个表达式,如下所示:

... ORDER BY `year`, `month` 

-或-

通常,日期信息存储在 DATE 或 DATETIME 列中。在这种情况下,您可以按日期列排序:

SELECT DATE_FORMAT(datecol,'%M %Y') AS month_year
  FROM ...
 ORDER BY datecol  

或者,您可以派生一个表达式,该表达式具有您可以排序的值:

... ORDER BY STR_TO_DATE(CONCAT(`year`,' ',`month_name`),'%Y %M')

【讨论】:

    【解决方案2】:

    试试这个::

    SELECT * FROM updates ORDER BY `year` ASC, `month` ASC
    

    【讨论】:

      猜你喜欢
      • 2020-08-28
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      • 2012-06-04
      • 2013-01-31
      • 1970-01-01
      相关资源
      最近更新 更多