sql输出中的独立月份

tjjdgumg  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(242)

我有一个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,比如:

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 |

有可能用月份来分隔行,这样吗?

| 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;
        }

试图达到这样的目标:

但我的输出是这样的:

voj3qocg

voj3qocg1#

如果我没弄错的话,你只需要按日期订货

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

在使用GROUPBY时,应该聚合不在GROUPBY子句中的列

1l5u6lss

1l5u6lss2#

您可以尝试以下sql:

SELECT YEAR(date) y, MONTH(date) m, name, date FROM ta WHERE user_id = '{$_SESSION['id']}' ORDER BY y desc, m desc, date desc;

查询结果如下:

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 匹配年和月。

relj7zay

relj7zay3#

下面是一段php代码,它应该是您想要实现的目标的良好开端。这是基于你的样品 money_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>";

这将为您提供一个类似这样的输出,然后您可以根据需要对其进行样式设置:

<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>

相关问题