0

だから私はデータベースからの値を持つテーブルを持っています:

$result=mysql_query("SELECT * FROM database WHERE date = '$period'") or die (mysql_error());
while ($row_result = mysql_fetch_array($result) {
  $article = $row_result['article'];
  ...
  //It shows something like this:

id  |  article |  some more data |
4   |  1234    |  data           |
8   |  654     |  data           |
9   |  654     |  data           |

各行が表示されますが、今私がやりたいのは、各記事の後にいくつかの値を合計する別の行を表示することですが、記事番号が同じ場合は、たとえばそれらの 2 つの後に 1 行を表示します。同じ記事番号がいくつあるかはわかりませんが、テーブルに次々と表示され、同じ値を持つ場合は、それらの後に行を表示したいと思います。

最初に私はこのようなことをしました:

 $article2 = "";
 if ($article2 != $article) {
    <td>...</td>
       .....  
 }
 $article2 = $article;

しかし、これはユニークな記事に役立ちます。記事の後に余分な行が表示されますが、同じ記事が 5 行あると、最初の記事の後に余分な行が表示されます。そのようです:

    id  |  article |  some more data |
    4   |  1234    |  data           |
extra   |  1234    |  sum data       |
    8   |  654     |  data           |
extra   |  654     |  sum data       |
    9   |  654     |  data           |

余分な行が異なる記事番号の後にのみ表示されることを理解する何らかのロジックについて助けが必要です。私がやろうとしていることを皆さんが理解してくれることを願っています:)助けていただければ幸いです。

4

2 に答える 2

0

$article2="";次のように、それがループの外側にあることを確認してください。

$article2="";
while ($row_result = mysql_fetch_array($result) {
  $article = $row_result['article'];
  //...
  if ($article2 != ($article || "")) {
    print "<td>...</td>";
    print "  .....  ";
  }
  $article2 = $article;
  //...
}

また、。を使用して最初のループもチェックします!= ""

于 2012-12-03T10:21:55.520 に答える
0

!コメントで更新。

$result=mysql_query("SELECT * FROM database WHERE date = '$period' ORDER BY ABS(machine),shift,id,article ASC");

$currentArticle = 0;
while ($row = mysql_fetch_array($result)) {
    if ($row['article']!=$currentArticle) {  //check1
        if ($currentArticle != 0) { //check2
            //show extra row for article > $currentArticle
            //your query doesnt contain this article, but I guess that is correct?
            $result_kogus = mysql_query("SELECT SUM(amount), SUM(reject), SUM(work) FROM database WHERE date = '$periood' AND machine = '".$row['machine']."' AND order = '".$row['order']."'") or die (mysql_error());

            //print row
        }

        $currentArticle = $row['article'];
    }
    //show regular row
}

if ($currentArticle != 0) { //check 3 > print summary after last row
    $result_kogus = mysql_query("SELECT SUM(amount), SUM(reject), SUM(work) FROM database WHERE date = '$periood' AND machine = '".$row['machine']."' AND order = '".$row['order']."'") or die (mysql_error());

    //print row
}



//What would happen on your example data:
//id  |  article |  some more data |
//4   |  1234    |  data           |
//8   |  654     |  data           |
//9   |  654     |  data           |

//round 1, article 1234
//check1 = true (1234!=0)
//check2 = false (0!=0)
//currentArticle is changed to 1234
//regular row printed

//round2, article 654
//check1 = true (654!=1234)
//check2 = true (1234!=0)
//query is executed
//summary is printed for 1234
//currentArticle is changed to 654
//regular row printed

//round3, article 654
//check1 = false (654!=654)
//regular row printed

//loop ends

//check3 = true (654!=0)
//query is executed
//summary is printed for 654
于 2012-12-03T10:30:31.393 に答える