2016-07-24 3 views
2

データベースから情報を抽出して表示する必要があります。私の問題は:列 'fatura'(表A)は常に複数の 'stur'行(表B)にリンクされます。私は、それぞれの「ストール」に対して同じ「ファットゥーラ」を表示しない方法を見つけることができません。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'列は何が含まれているんを見ることができますか?そのようなデータの1つまたは2つを表示してください – 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'];

注意:

は、文字列変数とGROUP_CONCATためMySQL最大サイズに注意してください。

GROUP_CONCATの場合、最大長(デフォルトでは1024)が制限されている場合は、 の長さ(セッションスコープ)を変更する必要があります。

SET SESSION group_concat_max_len = 10000

Set group_concat_max_len permanently (MySQL config)

+0

私はPHP側に集中していた、あなたのメソッドは完全に働いた。 sturフィールドは、プロセスのドキュメント番号です。私はここで私の脳を揚げていた、あなたの助けをたくさんありがとう! –

+0

ようこそ。私が助けることができてうれしい。 – 1000111

+0

他人が役に立つと感じるように、答案を**受け入れ**として練習してください。 [**どのように答えを受け入れるか**](http://meta.stackexchange。 – 1000111

0

あなたは、PHPでこれを行うことができる方法のちょうど簡単な例を:それはで 行われています。 (最初に配列を作成し、foreachループに切り替えて、シナリオを適切に再現する必要がありました)

mysqlで直接問題を解決するよりももう少し作業がありますが、このようなものを使用しなければなりません。また、私は、 "stur"の後に "、"を設定しませんでした - 番号、これはもう一度いくつかの作業が必要になります。

また、この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']; 
} 
関連する問題