我有以下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 |
如果我按以下方式使用分组依据:
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;
}
答案 0 :(得分:2)
如果我对问题的理解正确,那么您只需要按日期排序
SELECT YEAR(date) desc, MONTH(date), id, name, date
FROM money_month
WHERE user_id = '{$_SESSION['id']}'
Order BY 1 desc, 2 desc
使用分组依据时,您应该aggregate列,它们不在分组依据子句中
答案 1 :(得分:1)
这是一段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>
答案 2 :(得分:0)
您可以尝试以下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
来匹配年份和月份。