2016-07-24 3 views
2

Мне нужно извлечь и отобразить некоторую информацию из моей базы данных. Моя проблема: столбец «fatura» (в таблице A) всегда будет привязан к кратным «stur» (в таблице B). Я не могу найти, как не отображать ту же «fatura» для каждого «stur».Как сгруппировать данные с MySQL + Php?

Мой код:

<?php 
$mysqli = NEW MySQLi('localhost','root','','server'); 

$sqlFatura = $mysqli->query("SELECT fatura,stur 
          FROM faturas inner join anexos 
          WHERE ID_fatura = FK_fatura 
          "); 


if($sqlFatura->num_rows > 0){ 
    while($rows = $sqlFatura->fetch_assoc()){ 
     $fatura = $rows['fatura']; 
     $stur = $rows['stur'];  

     echo "<p> Fatura $fatura => Stur: $stur </p>"; 
?> 

Результат прямо сейчас:

'Fatura FT01 => Stur 01 
    Fatura FT01 => Stur 02 
    Fatura FT01 => Stur 03 
    Fatura FT02 => Stur 04 
    Fatura FT02 => Stur 05' 

Нужно быть:

'Fatura FT01 => Stur 01, 02, 03 
    Fatura FT02 => Stur 04, 05 

Любые предложения приветствуются.

Заранее благодарен!

+0

Что содержится ваш 'stur' столбец? показать один или два таких данных – 1000111

ответ

3

Вы можете попробовать использовать GROUP BY ID_fatura вместе с GROUP_CONCAT(stur).

SELECT 
    fatura, 
    GROUP_CONCAT(stur) AS allSturs 
FROM 
    faturas 
INNER JOIN anexos ON ID_fatura = FK_fatura 
GROUP BY ID_fatura 

Примечание: Поскольку имя столбца stur изменено на allSturs так что вам нужно изменить строку, где вы получаете значение этого.

$stur = $rows['allSturs'];

Внимание:

Осторожно MySQLмаксимального размера для строки переменной и GROUP_CONCAT.

Если GROUP_CONCAT максимальная длина является пределом (по умолчанию 1024), вы должны изменить временную настройку (область сеанса) для ее длины. Это сделано:

SET SESSION group_concat_max_len = 10000

Set group_concat_max_len permanently (MySQL config)

+0

Я сосредоточился на стороне php, ваш метод работал отлично. Яркое поле - это номера документов процесса. Я жарил свои мозги здесь, большое спасибо за помощь! –

+0

Добро пожаловать. Рад, что я мог бы помочь. – 1000111

+0

Обратите внимание, что ответ на этот вопрос принят **, если он работает для вас, чтобы другие считали его полезным. [** Как принять ответ **] (http: //meta.stackexchange.com/questions/5234/how-do-accepting-an-answer-work) – 1000111

0

Просто быстрый пример того, как вы могли бы сделать это с помощью PHP. (сначала нужно было создать массивы и переключиться на цикл foreach, чтобы правильно воссоздать ваш сценарий)

Вы можете видеть, что это немного больше, чем при решении проблемы непосредственно в mysql, но может быть, вы когда-нибудь должны использовать что-то вроде этого. Также я не установил «,» после «stur» -numbers, это потребует еще немного работы.

Вы также можете увидеть это answer about how to break those groups into an array

$faturas = array(
array('fatura' => 'Fatura FT01', 'stur' => '01'), 
array('fatura' => 'Fatura FT01', 'stur' => '02'), 
array('fatura' => 'Fatura FT01', 'stur' => '03'), 
array('fatura' => 'Fatura FT02', 'stur' => '04'), 
array('fatura' => 'Fatura FT02', 'stur' => '05'), 
); 

$firstIteration === true; 
foreach ($faturas as $rows) { 
    if($lastFatura !== $rows['fatura']){ 
     if($firstIteration === false){ 
      echo '</p>'; 
     } 
     echo '<p>Fatura' . $rows['fatura'] . ' => Stur'; 
     $lastFatura = $rows['fatura']; 
    } 
    $firstIteration = false; 
    echo ' ' . $rows['stur']; 
} 
Смежные вопросы