PHP MYSQL需要对在某些列中具有相同值的行进行分组

时间:2019-02-20 22:11:38

标签: php mysql wordpress

我有一个名为“ entries”的表,其列为:发起者,协作者,engagement_partner,利基市场和Fee_potential。表中的某些行具有相同的发起者。我有一个表格,有人填写,然后将其提交到数据库。我尝试使用GROUP BY,但在此方面需要一些帮助。

我的WordPress SQL语句:这将在WordPress函数文件中使用。

global $wpdb;
$rows = $wpdb->get_results( "SELECT * FROM entries group by originator");

我需要在下面以表格格式显示数据。基本上,我需要基于相同的发起者对每个条目进行分组。

<table class="table">
	<thead>
	  <tr>
	    <th>Originator</th>
	    <th>Collaborator</th>
	    <th>engagement_partner</th>
	    <th>Niche</th>
	    <th>Fee Potential</th>
	</tr>
	</thead>

	<tbody>
	    <tr>
	        <td><b>First Originator</b></td>
	        <td>Company Name</td>
	        <td>Engagement Partner</td>
	        <td>Web</td>
	        <td>$40000</td>
	    </tr>
	    <tr>
	        <td><b>First Originator</b></td>
	        <td>Company Name</td>
	        <td>Engagement Partner</td>
	        <td>Web</td>
	        <td>$40000</td>
	    </tr>
	    <tr>
	        <td><b>First Originator</b></td>
	        <td>Company Name</td>
	        <td>Engagement Partner</td>
	        <td>Web</td>
	        <td>$40000</td>
	    </tr>
	</tbody>
</table>

<br>
<br>

<table class="table">
	<thead>
	  <tr>
	    <th>Originator</th>
	    <th>Collaborator</th>
	    <th>engagement_partner</th>
	    <th>Niche</th>
	    <th>Fee Potential</th>
	</tr>
	</thead>

	<tbody>
	    <tr>
	        <td><b>Second Originator</b></td>
	        <td>Company Name</td>
	        <td>Engagement Partner</td>
	        <td>Web</td>
	        <td>$40000</td>
	    </tr>
	    <tr>
	        <td><b>Second Originator</b></td>
	        <td>Company Name</td>
	        <td>Engagement Partner</td>
	        <td>Web</td>
	        <td>$40000</td>
	    </tr>
	</tbody>
</table>

2 个答案:

答案 0 :(得分:1)

我建议您获取所有条目并像这样用php将它们分组;

global $wpdb;
$rows = $wpdb->get_results( "SELECT * FROM entries");
$originators = [];
foreach($rows as $row)
{ 
    $originators[$row->originator][] = $row;
}

然后遍历创建者以填充表,如下所示:

<?php
foreach($originators as $originator => $entries){
?>

   <table class="table">
    <thead>
      <tr>
        <th>Originator</th>
        <th>Collaborator</th>
        <th>engagement_partner</th>
        <th>Niche</th>
        <th>Fee Potential</th>
    </tr>
    </thead>

    <tbody>
    <?php foreach($entries as $entry){ ?>
        <tr>
            <td><b> <?php echo $entry->originator; ?></b></td>
            <td><?php echo $entry->collaborator; ?></td>
            <td><?php echo $entry->engagement_partner; ?></td>
            <td><?php echo $entry->niche; ?></td>
            <td><?php echo $entry->fee_potential;?></td>
        </tr>
    <?php } ?>
    </tbody>
</table>
<?php}?>

答案 1 :(得分:0)

您所寻找的似乎不是GROUP BY语句。

看到示例HTML结构,您正在寻找的是行的有序列表。然后,您可以使用php对结果进行排序,然后使用它们

global $wpdb;
$rows = $wpdb->get_results( "SELECT * FROM `entries`");
$sortedRows = [];

foreach($rows as $row) {
    if (!isset($sortedRows[$row->originator])) {
        $sortedRows[$row->originator] = [];
    }
    $sortedRows[$row->originator][] = $row;
}

另一种方法是在查询中使用ORDER BY,由于我不知道您创建HTML结构的方法是什么,所以我不会完全解决这个问题:

global $wpdb;
$rows = $wpdb->get_results( "SELECT * FROM `entries` ORDER BY `originator` ASC");
$currentOriginator = NULL;

foreach ($rows as $row) {
   if ($row->originator !== $currentOriginator) {
       //create table
       $currentOriginator = $row->originator;
   }
   //add the row to the table
}