PHP重複データ処理方法とは?

このQ&Aのポイント
  • PHPで重複データを処理する方法について解説します。
  • tableの中のデータを結合して出力する方法について説明します。
  • rowspanを使ってqtyの値に応じて結合する方法について解説します。
回答を見る
  • ベストアンサー

php 重複データ処理

以下のtableを取得しています。 id   qty   name   price ___________________________________ 1    1    A    100 2    1    B    100 3    4    C    200 4    4    D    30 5    5    E    450 6    6    F    20 7    9    G    600 8    9    H    120 9    9    I    90 htmlのtableでrowspanを使って下記のように 出力するにはどうすればよいでしょうか? (qtyの1が1段結合、9が3段結合させ、 nameとpriceは結合なしというふうになってます。) qty | name | price ______________________ 1  |  A  | 100    _________________    |  B  | 100 ______________________ 4  |  C  | 200    _________________    |  D  | 30 ______________________ 5  |  E  | 450 ______________________ 6  |  F  | 20 ______________________    |  G  | 600    _________________ 9  |  H  | 120   _________________    |  I  | 90 ______________________

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

たとえばこんなかんじ $sql="select qty,name,price,rowspan from hoge"; $sql.=" inner join (select qty,count(*) as rowspan from hoge group by qty) as sub"; $sql.=" using(qty) order by qty asc"; $res=mysql_query($sql); $str="<table border>\n"; $count=1; while($row=mysql_fetch_array($res,MYSQL_ASSOC)){ $str.= "<tr>\n"; if($count==1){ $rowspan=$row["rowspan"]==1?"":" rowspan=\"".$row["rowspan"]."\""; $str.= "<td".$rowspan.">". $row["qty"]."</td>\n"; } $str.= "<td>".$row["name"]."</td>\n"; $str.= "<td>".$row["price"]."</td>\n"; $str.= "</tr>\n"; $count=$count>=$row["rowspan"]?1:$count+1; } print $str;

suhixinkusu
質問者

お礼

やっと慣れてきたところなので、 少し解読に時間がかかりましたが、 とても分かり易かったです。 ありがとうございました。

関連するQ&A

  • ACCESSでの結合プロパティについて

    ACCESSでの結合プロパティは、3つあって、1つ目は2つのテーブルに共通するものだけを引っ張ってくる。 2つ目は片方の全部と、もう1方では、共通するものだけ。3つ目は、2つ目の逆。 両方のレコードを持ってくるということは出来ないのでしょうか? 例:「data」で結合して、表示は、今回厳密には定義しません。 テーブル1 ID data 1 a 2 b 3 c 4 d 5 e 6 f テーブルB ID data 4 d 5 e 6 f 7 g 8 h 9 I 10 j 結合プロパティ(1)では、 ID data 4 d 5 e 6 f 結合プロパティ(2)では、 ID data 1 a 2 b 3 c 4 d 5 e 6 f 結合プロパティ(3)では、 ID data 4 d 5 e 6 f 7 g 8 h 9 I 10 j となると思います。 今やりたいことは、全部持ってくることです。 ID data 1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 I 10 j よろしくお願い致します。

  • リストのデータを重複なしでランダムに抽出する

    シート1に下記のように14種類の名前リストがあります     A 1   A 2   B 3   C 4   D 5   E 6   F 7   G 8   H 9   I 10  J  11  K 12  L 13  M 14  N 上記の名前を下記のように別シートの数列おきの列(行は同一)に重複なしに行毎にランダムに抽出する事が関数で出来るでしょうか?(エクセルは2010です) ちなみに下記は一列おきのセルに抽出した例です   A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA 1 D   L   K    I    A   M   N    B   H   J    C    F    E   G 2 K   J   M   H    I   G   F    E   D    A    B   N   C    L 3 E   J   A    L   B   M    K   C   N    G    F   D    H   I どなたか教えていただける方がおりましたらよろしくお願いします。

  • SQLがわかりません。

    以下のTESTテーブルから以下の結果を表示するようなSQLを教えて頂けないでしょうか。 TESTテーブルでTYPE(1,2,3)を抽出して、2,1,3の順番にして それぞれのTYPEごとにDBIDでソートをしたいです。 どうかよろしくお願いいたします。 table TEST DBID | NAME | TYPE ------------------------------- 1 | A | 1 2 | B | 2 3 | C | 3 4 | D | 4 5 | E | 1 6 | F | 2 7 | G | 3 8 | H | 4 9 | I | 1 10 | J | 2 結果 DBID | NAME | TYPE ------------------------------- 2 | B | 2 6 | F | 2 10 | H | 2 1 | A | 1 5 | D | 1 9 | G | 1 3 | D | 3 7 | G | 3

  • C言語の配列の使い方について質問です。

    以下のプログラムを配列を使って見やすくしたいのですが、どのように作ったら良いでしょうか? 宜しくお願いします。 #include<stdio.h> int main(void) { int a, b, c, d, e, f, g, h, i, j, k, l, m ,n, o; /*5段目の処理*/ for(a = 1; a <= 15; a++) { for(b = 1; b <= 15; b++) { if(a == b) continue; for(c = 1; c <= 15; c++) { if(a == c || b == c) continue; for(d = 1; d <= 15; d++) { if(a == d || b == d || c == d) continue; for(e = 1; e <= 15; e++) { if(a == e || b == e || c == e || d == e) continue; // printf("%d %d %d %d %d\n", a, b, c, d, e); ////4段目//// if(a>b){ f=a-b; } else if(a<b){ f=b-a; } if(b>c){ g=b-c; } else if(b<c){ g=c-b; } if(c>d){ h=c-d; } else if(c<d){ h=d-c; } if(d>e){ i=d-e; } else if(e<d){ i=e-d; } // printf(" %d %d %d %d \n", f, g, h, i); /////3段目//// if(f>g){ j=f-g; } else if(f<g){ j=g-f; } if(g>h){ k=g-h; } else if(g<h){ k=h-g; } if(h>i){ l=h-i; } else if(h<i){ l=i-h; } // printf(" %d %d %d \n", j, k, l); /////2段目//// if(j>k){ m=j-k; } else if(j<k){ m=k-j; } if(k>l){ n=k-l; } else if(k<l){ n=l-k; } // printf(" %d %d \n", m, n); /////三段目///// if(m>n){ o=m-n; } else if(m<n){ o=n-m; } // printf(" %d \n", o); if(a != b != c != d != e != f != g != h != i != j != k != l != m != n != o){ printf("%d %d %d %d %d\n", a, b, c, d, e); printf(" %d %d %d %d \n", f, g, h, i); printf(" %d %d %d \n", j, k, l); printf(" %d %d \n", m, n); printf(" %d \n", o); } } } } } } }

  • 引数について

    すみません・・・。 ACCESSを使用してSQL構文を作成しているのですが 下記のようなテーブルを作成してpriceがnullのものだけ抜き出して ’ヌル値’と表示させたいと思っておりますが 「(tbl3.price,'ヌル値')の関数で使用されている引数の数が正しくない」というエラーとなってしまいます。 こちら原因は何によるものか教えて頂けないでしょうか・・・。 よろしくお願い致します。 id1,name id3,name 1 a     1  300 2 b     2  500 3 c     4  500 4 d     6  1200 5 e     8  1500 6 f     9  1500 7 g     10  10000 8 f 9 h 10 i select tbl1.id ,name ,price ,isnull(tbl3.price,'ヌル値') from tbl1 LEFT JOIN tbl3 ON tbl1.id=tbl3.id where price is null

  • ツリー情報のデータをSQLで取得したい

    SQLServer 2008 です。 以下のツリーデータの場合に A ┬C │├D ┬H ││ ├I ││ └J │└E B ┬F ┬I  │ └L  └G 次のようなデータを登録しています。 ┌──┬──┬──┐ │OYA │KO │Data│ ├──┼──┼──┤ │A │C  │"C" │ ├──┼──┼──┤ │A  │D  │"D" │ ├──┼──┼──┤ │A  │E  │"E" │ ├──┼──┼──┤ │B  │F  │"F" │ ├──┼──┼──┤ │B  │G  │"G" │ ├──┼──┼──┤ │D  │H  │"H" │ ├──┼──┼──┤ │D  │I  │"I" │ ├──┼──┼──┤ │D  │J  │"J" │ ├──┼──┼──┤ │F  │I  │"I" │ ├──┼──┼──┤ │F  │L  │"L" │ └──┴──┴──┘ 引数OYA="A"でSQLを実行した場合に 以下のような この引数を含むそれ以下のツリーに関する データを取得する方法を教えてください。 ┌──┬──┬──┐ │OYA │KO │Data│ ├──┼──┼──┤ │A │C  │"C" │ ├──┼──┼──┤ │A  │D  │"D" │ ├──┼──┼──┤ │A  │E  │"E" │ ├──┼──┼──┤ │D  │H  │"H" │ ├──┼──┼──┤ │D  │I  │"I" │ ├──┼──┼──┤ │D  │J  │"J" │ └──┴──┴──┘

  • VBAで重複しないデータを1列縦に並べたいです。

    下記の様にC,E,G,Iに文字(主に地名)を入力した後にVBAでA列に重複しない文字だけ縦に並べて行きたいのですがご教授頂けませんでしょうか。 B,D,F,H,Iは備考として自由記入したいので対象外にしたいです。 説明が難しいのですがA1から横に検索し重複しない文字や数字のみA列上から詰めて転記するイメージとなります。度々入力値が変更される事もあるので実行ボタンを設置してVBAで処理出来たら助かります。どうぞ宜しくお願い致します。 A, B, C, D, E, F, G, H, I, j 111 111 222 111 333 222 111 111 222 444 333 666 555 333 777 444 999 222 333 888 666 555 777 999 888

  • 入力したいセルへEnterをクリックして移動

    入力したいセルのみEnterキーで移動したいのですが、 出来ますか。 D4からスタートし(D4からH4)まで結合 D5 (D5からH5)まで結合 D6 (D6からH6)まで結合 A7 (A7からC7)まで結合 D7 (D7からH7)まで結合 D8 (D8からH8)まで結合 D9 (D9からH9)まで結合 D10 (D10からH10)まで結合 D12 (D12からH12)まで結合 D14-E14-F14-G14-H14 D16-E16-F16-G16-H16 B19 (B19,C19)結合 B20 (B20,C20)結合 B21 (B21,B22)結合 C21 (C21,C22)結合 D19 (D19からD22)まで結合されています まだ続きが沢山ありませが、上記の順で移動させようと、 過去の質問回答をいろいろ実行したところ、 私には、VBAは難しくてエラーが出たり、 セルの結合がある場合思うように移動してくれなかったりして どうにも成りません、何方か出来るだけ簡単に解り易く説明して頂けませんか。

  • PostgreSQL、外部ファイルからDBへの振り分け反映の方法

    PostgreSQL、外部ファイルからDBへの振り分け反映の方法 早速ですが質問させて頂きます。 『外部ファイル.txt』内容 ------ここから------ A B C D E F G H I 1 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 1 3 4 5 6 7 8 9 1 2 B C D E F G H I A 4 5 6 7 8 9 1 2 3 5 6 7 8 9 1 2 3 4 ------ここまで------ 上記のようなスペース区切りの文字ファイルがあるとして、このファイルのデータを 英字から始まる行はtable1へ、数字から始まる行はtable2へと振り分けたいです。 現在、1つのテーブルに反映させることは以下のコマンドを使用することにより可能なのですが、 2つのテーブルに振り分ける方法は全く思い浮かびません。 1つのテーブルに反映させる方法 \COPY table1 from 'C:\\~ファイルパス~\\外部ファイル.txt' delimiters ' ' null '' 下記のようなファイル内容でもかまいません。 ------ここから------ A B C D E F G H I -------------------- 1 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 1 3 4 5 6 7 8 9 1 2 -------------------- B C D E F G H I A -------------------- 4 5 6 7 8 9 1 2 3 5 6 7 8 9 1 2 3 4 ------ここまで------ あるいは ------ここから------ A B C D E F G H I -------------------- 1 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 1 3 4 5 6 7 8 9 1 2 ------ここまで------ わかる方がいらっしゃいましたらご回答いただければと思います。 また、出来ないようであれば何か参考になりそうな情報を教えていただければありがたいです。 PostreSQLのバージョンは8.2?です。 不足している情報がありましたら指摘してください。 以上です、お手数かけますがよろしくお願いいたします。

  • 線形代数の問題?

    線形代数の問題だと思うのですが、9個の未知数がa b c d e f g h i  があって、  a+b+c=2 d+e+f=2 g+h+i=2 a+d+g=2 b+e+h=2 c+f+i=2 を満たしているとします。  行列で書くと、 「1 1 1 0 0 0 0 0 0 | |0 0 0 1 1 1 0 0 0| |0 0 0 0 0 0 1 1 1| |1 0 0 1 0 0 1 0 0|=A |0 1 0 0 1 0 0 1 0| |0 0 1 0 0 1 0 0 1 」 x=(a b c d e f g h i) c=(2 2 2 2 2 2 2 2 2) として、A(xの転置)=(cの転置) と書けます。 a~iは0か1として、解が何個あるのか調べたいのですがどのように考えたらよいのでしょうか。

専門家に質問してみよう