繁体   English   中英

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

[英]How to format 1st row in MySQL output differently from all following rows in PHP?

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

首先,让我做一个必要的观察,你真的不应该使用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; ?>

我没有测试过这个,但你明白了

这是一个非常常见的应用程序,您需要按特定列对输出进行分组。 有很多方法可以做到这一点。 由于您使用的是PhP,因此首先要确保检索按“事件”排序的记录。 然后保留一个名为$ old_event的变量,并将其与刚刚获取的事件进行比较。 如果不同,则输出事件名称并将$ old_event设置为新获取的事件。 如果不是,则仅输出其他列。

您也可以使用带有group by子句的select,但是如果要按照上面的说明进行编码,则不需要...按事件排序的简单选择应该这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM