Php SQL输出中的单独月份

Php SQL输出中的单独月份,php,mysql,sql,Php,Mysql,Sql,我有以下SQL语句: SELECT id, name, date FROM money_month WHERE user_id = '{$_SESSION['id']}'; 它返回的行如下所示: | id | name | date | |----|--------|------------| | 1 | Mike | 2018-09-05 | | 2 | Nelson | 2018-09-07 | | 3 | Bity | 2018-09-08 | | 4 |

我有以下SQL语句:

SELECT id, name, date FROM money_month WHERE user_id = '{$_SESSION['id']}';
它返回的行如下所示:

| id | name   | date       |
|----|--------|------------|
| 1  | Mike   | 2018-09-05 |
| 2  | Nelson | 2018-09-07 |
| 3  | Bity   | 2018-09-08 |
| 4  | Ory    | 2018-10-04 |
如果我使用Group by like:

SELECT id, name, date FROM money_month WHERE user_id = '{$_SESSION['id']}' GROUP BY YEAR(date), MONTH(date) ORDER BY date DESC;
它可以工作,但只显示每个月的第一行,如下所示:

| id        | name | date       |
|-----------|------|------------|
| September |      |            |
| 1         | Mike | 2018-09-05 |
| October   |      |            |
| 4         | Ory  | 2018-10-04 |
y       m   id  name    date
2018    9   4   klkvv   2018-09-18
2018    9   1   fsdfsa  2018-09-01
2018    7   3   mujfis  2018-07-05
可以用月份来分隔行吗

| id        | name   | date       |
|-----------|--------|------------|
| September |        |            |
| 1         | Mike   | 2018-09-05 |
| 2         | Nelson | 2018-09-07 |
| 3         | Bity   | 2018-09-08 |
| October   |        |            |
| 4         | Ory    | 2018-10-04 |
我的SQL输出

$month = '';
    while($row = $result->fetch_assoc()) {


        if($month != $row["date"])
        {
            $month = substr($row["date"],5,2);
            if ($month == "10") { $output= "October"; }
            if ($month == "9") { $output= "September"; }

            echo $output;
        }
试图实现这样的目标:


但是我的输出是这样的:

如果我正确理解了这个问题,您只需要按日期订购即可

SELECT YEAR(date) desc, MONTH(date),  id, name, date 
FROM money_month 
WHERE user_id = '{$_SESSION['id']}' 
Order BY 1 desc,   2 desc

当您使用Group by时,应该选择不在Group by子句中的列

SELECT YEAR(date) y, MONTH(date) m, name, date FROM ta WHERE user_id = '{$_SESSION['id']}' ORDER BY y desc, m desc, date desc;
并且,查询结果如下所示:

| id        | name | date       |
|-----------|------|------------|
| September |      |            |
| 1         | Mike | 2018-09-05 |
| October   |      |            |
| 4         | Ory  | 2018-10-04 |
y       m   id  name    date
2018    9   4   klkvv   2018-09-18
2018    9   1   fsdfsa  2018-09-01
2018    7   3   mujfis  2018-07-05

然后您可以使用
y
m
来匹配年份和月份。

下面是一段PHP代码,它应该为您想要实现的目标提供一个良好的开端。它基于您的示例
money\u month
表和所需的输出图像

$query = "SELECT id, name, date FROM money_month ORDER BY date DESC";
$result = $conn->query($query) or die("Query failed!");
$month = $year = 0;
echo "<table border=\"1\">";
while ($row = $result->fetch_assoc()) {
    $date = date_create_from_format('Y-m-d', $row['date']);
    $this_year = (int)$date->format('Y');
    $this_month = (int)$date->format('n');
    if ($year != $this_year) {
        echo "<tr><td colspan = \"3\">$this_year</td></tr>\n";
        $year = $this_year;
    }
    if ($month != $this_month) {
        echo "<tr><td>" . $date->format('M') . "</td><td>{$row['name']}</td><td>{$row['date']}</td>";
        $month = $this_month;
    }
    else {
        echo "<tr><td></td><td>{$row['name']}</td><td>{$row['date']}</td>";
    }
}
echo "</table>";
$query=“按日期描述从货币订单中选择id、名称、日期”;
$result=$conn->query($query)或die(“查询失败!”);
$month=$year=0;
回声“;
而($row=$result->fetch_assoc()){
$date=date\从\格式创建\格式('Y-m-d',$row['date']);
$this_year=(int)$date->format('Y');
$this_month=(int)$date->format('n');
如果($year!=$this\u year){
回显“$this\u year\n”;
$year=$this_year;
}
如果($month!=$this\u month){
echo“$date->format('M')。“{$row['name']}{$row['date']}”;
$month=$this\u month;
}
否则{
回显“{$row['name']}{$row['date']}”;
}
}
回声“;
这将为您提供如下输出,您应该能够根据需要对其进行样式设置:

<table border="1">
  <tr><td colspan = "3">2018</td></tr>
  <tr><td>Oct</td><td>Ory</td><td>2018-10-04</td></tr>
  <tr><td>Sep</td><td>Bity</td><td>2018-09-08</td></tr>
  <tr><td></td><td>Nelson</td><td>2018-09-07</td></tr>
  <tr><td></td><td>Mike</td><td>2018-09-05</td></tr>
</table>

2018
2018年10月10日至04日
2018年9月28日至08日
尼尔森2018-09-07
Mike2018-09-05

orderbydate
@splash58已经尝试过了,它仍然每月只输出一行(与组一起)。如果没有分组依据,ORDER BY将不会生成包含月份的行。@使用ORDER BY MONTH(date)时,每月的名称将打印到每一行,而不仅仅是整月上方的一行。您是否可以使用分组依据添加完整查询,您对此感到厌倦?@Eugene GROUP BY querry已添加。请添加查询。在没有看到全貌的情况下很难理解这个问题。这仍然不是我在这里要问的。我只是尝试对月份进行分组,如上面第一张图片所示。我发现了您的输出与您超出的不一致的原因,您使用了
$month=substr($row[“date”],5,2)
语句涵盖
$MOUNT
,但
$MOUNT!=$行[“日期”]
总是类似于
2018-09-01
,因此此语句没有用处。因此,在php代码中,添加另一个变量以确定月份与上月相同,如果是,则设置
$output=''
这正是我想要做的@很高兴我能帮忙。谢谢你的赏金