如何格式化MySQL输出中的第一行与PHP中的所有后续行不同?

时间:2013-12-31 20:44:43

标签: php mysql

我有一个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);

2 个答案:

答案 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>&nbsp;</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,但是如果要按照上面的解释编写代码,则不需要...按事件排序的简单选择应该这样做。