我有一个MySQL查询正在返回我需要的结果。但是,我想根据具体用例清理一下输出。具体来说,我想从输出中删除一个列,以便它只在第一次从数据库中提取时出现。这是我得到的输出类型的一个简单示例:
Event A - workshop 1
Event A - workshop 2
Event A - workshop 3
Event B - workshop 1
Event B - workshop 3
Event C - workshop 2
Event D - workshop 1
Event D - workshop 2
etc
这是我想要的:
Event A
workshop 1
workshop 2
workshop 3
Event B
workshop 1
workshop 3
Event C
workshop 2
Event D
workshop 1
workshop 2
所以,基本上,我只想看一次“事件A”标题,即使它是研讨会记录的一部分。
这是我正在使用的PHP代码(在这种情况下,“campaigntitle”是我只希望每个组看到一次的列。“assettitle”将显示在查询返回的每一行中):
<?php do { ?>
<tr>
<td><a href="detail-nd.php?recordID=<?php echo $row_assetslist['assetid']; ?>"> Details</a> <a href="assetupdate-nd.php?recordID=<?php echo $row_assetslist['assetid']; ?>">edit</a> delete</td>
<td><?php echo $row_campaignassetjoin['campaigntitle']; ?></td>
<td><?php echo $row_campaignassetjoin['assettitle']; ?></td>
<td><?php echo $row_campaignassetjoin['assettype']; ?></td>
</tr>
<?php } while ($row_campaignassetjoin = mysql_fetch_assoc($campaignassetjoin)); ?>
这是文档标题中相关的mysql查询:
mysql_select_db($database_campaignarchive, $campaignarchive);
$query_campaignassetjoin = "SELECT assets.*, campaign.* FROM campaign JOIN assets ON assets.campaignid=campaign.campaignid ORDER BY campaign.campaignid DESC";
$campaignassetjoin = mysql_query($query_campaignassetjoin, $campaignarchive) or die(mysql_error());
$row_campaignassetjoin = mysql_fetch_assoc($campaignassetjoin);
$totalRows_campaignassetjoin = mysql_num_rows($campaignassetjoin);
答案 0 :(得分:2)
首先,让我做一个必要的观察,你真的不应该使用mysql_ *函数。您应该使用PDO或mysqli _ *
这就是我要做的事情:
更新为了实现此目的,您的结果必须按广告系列标题进行排序
<?php $lastCampaign = ''; ?>
<?php foreach($rows as $row): ?>
<tr>
<td><a href="detail-nd.php?recordID=<?php echo $row['assetid']; ?>"> Details</a> <a href="assetupdate-nd.php?recordID=<?php echo $row['assetid']; ?>">edit</a> delete</td>
<?php if($lastCampaign != $row['campaigntitle']): ?>
<td><?php echo $row['campaigntitle']; ?></td>
<?php else: ?>
<td> </td>
<?php endif; ?>
<td><?php echo $row['assettitle']; ?></td>
<td><?php echo $row['assettype']; ?></td>
</tr>
<?php $lastCampaign = $row['campaigntitle']; ?>
<?php endforeach; ?>
我没有测试过这个,但你明白了
答案 1 :(得分:0)
这是一个非常常见的应用程序,您需要按特定列对输出进行分组。有很多方法可以做到这一点。由于您使用的是PhP,因此首先要确保检索按“事件”排序的记录。然后保留一个名为$ old_event的变量,并将其与刚刚获取的事件进行比较。如果不同,则输出事件名称并将$ old_event设置为新获取的事件。如果不是,则仅输出其他列。
你也可以使用带有group by子句的select,但是如果要按照上面的解释编写代码,则不需要...按事件排序的简单选择应该这样做。