Php SQL输出中的单独月份
我有以下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 |
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=''
这正是我想要做的@很高兴我能帮忙。谢谢你的赏金