PHP MYSQL нужно сгруппировать строки, которые имеют одинаковое значение в определенном столбце - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть таблица с именем «записи» со столбцами: оригинатор, соавтор, 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 голосов
/ 21 февраля 2019

Я предлагаю вам извлечь все записи и сгруппировать их с помощью 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}?>

0 голосов
/ 21 февраля 2019

Не похоже, что оператор 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...