重複データの表示方法

このQ&Aのポイント
  • 重複データの表示方法についてお知恵をお貸しください。
  • PDOを使用して取得したデータを売上表のように表示する方法を教えてください。
  • お力をお貸しいただけると幸いです。よろしくお願いします。
回答を見る
  • ベストアンサー

重複データの表示方法

お世話になっております。 またつまずいていますので、お知恵をお貸しください。 やりたい事は画像の一番下の売上表のような表を作りたいのです。 PDOで組んでいるのですが、 $SQL = "SELECT * FROM T_uriage JOIN T_kokyaku ON T_uriage.kokyaku_id = T_kokyaku.kokyaku_id JOIN T_shohin ON T_uriage.shohin_id = T_shohin.shohin_id" $uriage_ichiran = $db->prepare($sql); $uriage_ichiran->execute(array()) $uriage_ichiran01=$uriage_ichiran->fetch(PDO::FETCH_ASSOC)) ここまで取得できたのですが、売上表のようにする方法が思いつきません。 お力をお貸し下さい。 よろしくお願いします。

  • PHP
  • 回答数4
  • ありがとう数2

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

  • ベストアンサー
noname#244856
noname#244856
回答No.4

ロクにデバッグせずに回答して申し訳ありませんでした(汗 おそらくこれで大丈夫です。 http://ideone.com/u2EdM2 こんな感じでデバッグしたらちゃんと動いてくれました。 http://ideone.com/l6xOv2

wapparice2
質問者

お礼

わざわざデバッグまでして頂き、ありがとうございます。 やりたい内容が表示できるようになりました。

その他の回答 (3)

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

GROUP_CONCATをつかってみてください http://dev.mysql.com/doc/refman/5.1/ja/group-by-functions.html

noname#244856
noname#244856
回答No.2

こんな感じでどうですか・・・? http://ideone.com/7mEloI 既にある回答を実際にHTMLタグで組んでみた次第です。 ORDER BY の使い方間違ってたらごめんなさい・・・SQL日頃全然触らないので・・・

wapparice2
質問者

補足

ご回答ありがとうございます。 ご呈示頂いたプログラムを組んでみましたが、以下のように表示されます。 ラーメン 海川 花子 ラーメン 空井 次郎 餃子 何がおかしいでしょうか?

  • pa_cotta
  • ベストアンサー率43% (25/58)
回答No.1

データが取得できているのであれば、顧客IDの昇順(または降順)に並べて、ループの際に顧客IDが変われば顧客名を出力するようにすればいいかと思います。 <?php $kokyaku_id = ''; foreach ($uriage_ichiran01 as $uriage) { // 出力済みの顧客名かどうかを調べる if ($kokyaku_id != $uriage['kokyaku_id']) { // 出力していなければ顧客IDを保存して顧客名を出力 $kokyaku_id = $uriage['kokyaku_id']; echo $uriage['kokyaku_name']; } // メニューを出力(以下略) } こんな感じでしょうか。机上デバッグというか頭の中で組みたてただけなのでforeachのところとか違うかもしれません(汗

wapparice2
質問者

お礼

ありがとうございます。 ループの処理は自分の課題でもあります。

関連するQ&A

  • PHPでGLOBAL STATUSを取得?

    PHPのプログラム上で、global status情報を取得するにはどうすれば良いのでしょうか? MySQLへの接続にはPDOを使用しているので、PDOを使用して取得したいのですが・・・ 単純に、 $sql_global = 'SHOW GLOBAL STATUS'; $stmt_global = $dbh -> prepare($sql_global); $stmt_global -> execute(); while($value = $stmt_global->fetch(PDO::FETCH_ASSOC)) { var_dump($global); } としてみましたが、これでは全てNULLが返ってきてしまいました。 どうすれば良いか、ご存知の方がいらっしゃったら教えてください! どうぞよろしくお願いいたしますm(_ _)m

    • ベストアンサー
    • PHP
  • php 多重ループでエラー

    データベースからレコードの値を取得時に、 以下のエラーが発生します。 2度目のexecute()でなぜエラーが発生するのでしょうか? Fatal error: Call to a member function execute() on a non-object <? try {  $dbh = new PDO("mysql" . ":host=localhost" . ";" . "dbname=" . "test", "user", "password");  if (!$dbh)  {   $info = $dbh->errorInfo();   exit($info[2]);  } } catch (PDOException $e) {  exit('データベースに接続できませんでした。' . $e->getMessage()); } $sql = "SELECT * FROM Master"; $result = $dbh->prepare($sql); $result->execute(); while ($rs = $result->fetch(PDO::FETCH_ASSOC)) {  $sql = "SELECT * FROM MasteSub";  $sql = $sql . " Where ID = {$rs['ID']";  $result2 = $dbh->prepare($sql);  $result2->execute(); //ここでエラー発生  if ($rs2 = $result2->fetch(PDO::FETCH_ASSOC))  {   $Name = $rs["Name"];  }  $rs2 = null;  $result2 = null; } $rs = null; $result = null; 開発環境 OS:CentOS5 PHP:5.1.6 データベース:MYSQL

    • ベストアンサー
    • PHP
  • phpからsqliteにselect抽出

    phpからsqliteにselect抽出しています。 $sql = "select * from Table where C=?" $st = $db->prepare($sql); $st->bindParam(1, $key, PDO::PARAM_STR); $st->execute(); while ($row = $st->fetch(PDO::FETCH_ASSOC)) { *** *** } でエラーにはなりませんが、データがとれません。 updateやinsertで?(インジェクション)はうまくいくのですが、Selectでなぜ取得できないのでしょうか? bindParamをarrayにしたりprepare をqueryにしたりしましたが、 データが1件しか取れなかったりします。

    • ベストアンサー
    • PHP
  • PHPの書き方について

    PHPを独学で勉強中で、気になったことがあるので質問させていただきます。 最初に買った書籍とその次に買った書籍で書き方が違うところがあるので、普通はどちらでやるのか、また、使い分けがあるのかが知りたいです。 たとえば、データベースを1行ずつ取り出す処理で、1冊目では $pdo = new PDO($dnsinfo,$USER,$PW); $sql = "SELECT * FROM ○○"; $stmt = $pdo->prepare($sql); $stmt->execute(null); $res = ""; while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ $res .= $row['△△'] ."," .$row['□□'] ."<br>\n"; } ・・・というコードがあったのですが、2冊目には同じような処理が mysqli_fetch_assoc()を使って書かれていたり、 接続の仕方も1冊目では「new PDO($dnsinfo,$USER,$PW);」を使って書かれているのが、2冊目では「mysqli_connect()」になっていたり、 他にも同じような処理がよく似たコードで書かれています。 調べてみると、PHP5.5から1冊目のやり方になった・・・ような記事を見つけたのですが、どちらの本もPHP5.5と書いてあり、いまいちよくわかりません。 詳しい方いらっしゃいましたらご教示お願いいたします。

    • ベストアンサー
    • PHP
  • 組み合わせのマッチィングを過去のものと重複させない

    ある研究の素材マッチングで過去に比較したものを重複させないでテストする組み合せを表示するプログラムを作りたいと思っています。 DB table tests id material test1 test2 test3 1 | A | 1 | 1 | 0 2 | B | 0 | 1 | 0 3 | D | 0 | 0 | 1 4 | E | 1 | 0 | 0 5 | F | 0 | 0 | 0 6 | G | 0 | 1 | 1 このテーブルによると素材Aはtest1とtest2に参加しておりそのどちらかに参加している素材B,素材Gとは再び同じtestに参加する必要がなく test1とtest2に参加していない素材D,素材Fはtest4で素材Aとマッチさせることができるという事を表示できるものを作りたいです。 考えましたのは、 $sql='SELECT material,test1,test2,test3 FROM tests WHERE id=?'; $stmt=$dbh->prepare($sql); $stmt->execute(array($id)); $rec=$stmt->fetch(PDO::FETCH_ASSOC); $material=$rec[material]; $test1=$rec[test1]; $test2=$rec[test2]; $test3=$rec[test3]; これでどの素材がどのテストに参加したかを求めその次のtest4でいままでマッチしていない素材のグループを作るには $material=$_POST[material]; $sql="SELECT material FROM tests WHERE $material !=? and test1 !=? and test2 !=? and test3 !=?"; $stmt=$dbh->prepare($sql); $stmt->execute(array($material,$test1,$test2,$test3)); while( $rec=$stmt->fetch(PDO::FETCH_ASSOC) ); $material=$rec[material]; { echo $material; echo '<br>'; } と言う形で書けるかと思うのですが、この方法ですとtest(testと素材の数は次々増えていきます)が増えるたびにデータベースのカラムを足しPHPのsql文を書き足さないといけなくなります。 カラムを増やしていく事があまりいい事ではない様に解釈しています。また都度PHPを書き足すのもどうかという事で設計上改善が必要かと思っていますがその改善案にたどり着くことができません。 なにかより良い設計(PHPの書き方、およびDB設計)がありましたらどうぞどなたかお知恵をお貸しください。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 重複データを一つづつ表示したいです。

    mysqlの命令文等いろいろと試行錯誤しています。 添付画像のように、attachment_nameは画像なのですが、item_idが重複されていますので どれでもよろしいですので、各一つづつ表示させたいです。 mysql文はいろいろと結合していますが、下記の通りです。 function getfeatured01($sales_type='rental'){ $db = Database::instance(); //$rsfeat = $db->query("select item_id from items"); $sql = "SELECT *, attachment.name as attachment_name, ldk_type.id as ldkid, ldk_type.name as ldkname, caution_money_num.name as cautionmoneynum_name, reward_num.name as rewardnum_name FROM items INNER JOIN ldk_type ON ldk_type.id = items.ldk_type INNER JOIN caution_money_num ON caution_money_num.id = items.caution_money_num INNER JOIN reward_num ON reward_num.id = items.reward_num INNER JOIN attachment ON attachment.item_id = items.item_id WHERE sales_type = 'rental' and status = '1' order by price asc LIMIT 0,20 "; $rsfeat = $db->query($sql); return $rsfeat; } いろいろと検索してみますが、基本がなっていないせいか、理解ができません。 今回MySQLをご指導いただきたく質問いたしました。 申し訳ございませんが、ご指導のほど、宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLについてお願いします。

    下記の2つのテーブルより、各顧客が最後に売れた日を抽出したいのですがうまくいきません。 顧客テーブル kokyaku_id kokyaku_name 1 aaa 2 bbb 3 ccc 4 ddd 売上テーブル uriage_date kokyaku_id kingaku 2000-1-1 1 100 2011-12-1 2 200 2010-2-2 2 300 2009-3-1 1 50 2006-5-29 3 300 2007 3 400 2012-9-20 3 100 kokyaku_name | uriage_date aaa | 2009-3-1 bbb | 2011-12-1 ccc | 2012-9-20 顧客dddは売上がないので当然結果には出てこなくてOKです。 何結合でどのようなクエリにすればよろしいでしょうか。 まだDBを初めて2週間なので、ご教示お願い致します。

    • ベストアンサー
    • MySQL
  • SQLの質問です。

    SQLの質問です。 SQL Server 2008 R2 を使っている初心者です。 下の2つのテーブルがあります。 1)売上情報 table_uriage ・uriage_id ・user_id ・uriage_date ・uriage_kingaku 2)入金情報 table_nyukin ・nyukin_id ・user_id ・nyukin_date ・nyukin_kingaku この2つのテーブルに対して、同じ期間を指定して、集計表(ユーザー毎の合計)を 作りたいと思っています。別々の表にするには何の問題もないのですが、 問題は2つのSQLの結果を1つの表にしたいのですが、SQLをどのように組んだらいいか わかりません。 具体的な表としては、 user_id uriage_total nyukin_total ======================================== 001 11111 22222 002 33333 44444 003 55555 66666 みたいな感じになればいいのです。 どなたか教えて下さい。 よろしくお願いいたします。

  • PDOのprepareでLIKEの部分一致が使えません・・

    http://d.hatena.ne.jp/Sybian/20070521/p1 のサイトの例のように、LIKE '%文字列%' をprepareしようとしたのですが上手く結果が返りません。 PDOのプリペアステートメントは、 LIKEの部分一致や先頭一致に非対応なのでしょうか? $query="SELECT * FROM table WHERE id=:id OR like name='%:name%'"; $pdo=new PDO('mysql:host=localhost;dbname=database','user','password'); $stmt=$pdo->prepare($query); $stmt->bindValue(':id',$id,PDO::PARAM_INT); $stmt->bindValue(':name',$name,PDO::PARAM_STR); $stmt->execute(); return $stmt->fetchAll(PDO::FETCH_ASSOC);

    • ベストアンサー
    • PHP
  • mysqlのデータをPDOでDELETEできない

    PDOオブジェクト(PHP)を使用したmysqlのデータ削除について、質問させてください。 PDOオブジェクトを使用して、mysqlのデータ読み込み・削除を行っています。 特定のデータを読み込み、処理を行わせた後、対象のデータの削除をしたいのですが 読み込みは出来るのに、削除で失敗してしまいます。 処理を行わせるSQLをvar_dumpで出力させ、 それを直接phpMyAdminでSQL実行してみたのですが、 問題なく削除が行われています。 SQLの問題ではなく、PHP側の問題だと思うのですが、 解決方法が見つかっておりません。 知恵を貸していただけないでしょうか。 $post_data = explode('¥t', $_POST['data_array']); $user_id = $post_data[0]; $account_name = $post_data[1]; $data_id = $post_data[2]; $gunre_id = $post_data[3]; try { // DB接続 $dbh = new PDO($serverInfo["SERVER"], $serverInfo["USER"], $serverInfo["PASS"]); $dbh -> query('SET NAMES utf8'); // 処理させる対象アカウント情報を取得 $sql_account; $sql_account = 'SELECT * FROM '. $serverInfo['TBL_ACCOUNT']. ' WHERE GUNRE_ID = :gunre'; } $stmt_account = $dbh -> prepare($sql_account); $stmt_account -> bindParam(':gunre', $gunre_id, PDO::PARAM_STR); $stmt_account -> execute(); while($account = $stmt_account -> fetch(PDO::FETCH_ASSOC)) { // 取得してきたデータを使用して処理 // この処理は正常に行われているので、SELECTは正常に行われていると考えられます } // 処理が完了したら、データを削除 // ↓ここで組み立てたSQLを出力し、phpMyAdminでSQL実行すると、データは削除されました $sql_delete = 'DELETE FROM '. $serverInfo['TBL_DATA']. ' WHERE USER_ID = "'. $user_id. '" AND ACCOUNT_NAME = "'. $account_name. '" AND DATA_ID = "'. $data_id. '"'; $stmt_delete = $dbh -> prepare($sql_delete); // ↓元々はbindParamで指定していたのですが、処理が出来なかったので // $SQL_deleteの中に値を埋め込み、処理を行わせました。結局出来なかったのですが・・・ // $stmt_delete -> bindParam(':id', $user_id, PDO::PARAM_STR); // $stmt_delete -> bindParam(':account', $account_name, PDO::PARAM_STR); // $stmt_delete -> bindParam(':data', $data_id, PDO::PARAM_STR); $result = $stmt_delete -> execute(); var_dump($result); // ←出力結果は「false」です } catch (Exception $ex) { echo '<font color="red">システムエラーが発生しました</font><br />'; exit(); } 以上、よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう