アプリ版:「スタンプのみでお礼する」機能のリリースについて

Postgresqlのテーブルを使用して、ツリー型のメニューを作成したく考えております。

http://allabout.co.jp/gm/gc/377237/2/
こちらのサイトを参考にして作成しようと思ったのですが、Postgresからデータを取得する点までは出来たのですが、htmlを上手くphpから出力出来ずに困っています。

テーブル項目は3つ 
・章名    (第1章、第2章~のような形式)
・番号    (数字5桁、04020のような形)
・付属番号   (数字2桁 00~99)

例として以下の場合だと、(実際は数百件分あります)
  章名  |  番号  |  付属番号  
 第1章  | 01010  |  00  
 第1章  | 01020  |  00  
 第1章  | 01020  |  01  
 第2章  | 02010  |  00
 第3章  | 03010  |  00
 第3章  | 03010  |  01
 第3章  | 03010  |  02
 第3章  | 03020  |  00

このようなhtmlを出力したいのです。

<ul>
  <li><a href="url">第1章</a>
    <ul>
      <li><a href="url">01010</a>
        <ul>
          <li><a href="url">00</a></li>
        </ul>
      </li>
      <li><a href="url">01020</a>
        <ul>
          <li><a href="url">00</a></li>
          <li><a href="url">01</a></li>
        </ul>
      </li>
    </ul>
  </li>

  <li><a href="url">第2章</a>
    <ul>
      <li><a href="url">02010</a>
        <ul>
          <li><a href="url">00</a></li>
        </ul>
      </li>
    </ul>
  </li>
  <li><a href="url">第3章</a>
    <ul>
      <li><a href="url">03010</a>
        <ul>
          <li><a href="url">00</a></li>
          <li><a href="url">01</a></li>
          <li><a href="url">02</a></li>
        </ul>
      </li>
      <li><a href="url">03020</a>
        <ul>
          <li><a href="url">00</a></li>
        </ul>
      </li>
    </ul>
  </li>
</ul>


どうか知恵をお貸しください。
よろしくお願い致します。

質問者からの補足コメント

  • PHP Notice: Undefined variable: stmt in C:\XXXXX\YYYY\ZZZ.php on line 11
    HP Fatal error: Call to a member function fetch() on null in C:\XXXXX\YYYY\ZZZ.php on line 11

    実際に実行してみたのですが、
    上のようなエラーが出現しました。 
    変数stmtが定義されていないのと、fetchが空?のエラーのようです。

    php.iniでは
    extension=php_pdo_pgsql.dll は既にコメントを外してあります。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/04/24 13:28
  • すいません、データの取得は出来るようになりましたが、

    番号 | | 付属番号 | 章名
    -----------+---------+---------------+
    01010 | 00 | 第1章  |
    01040 | 00 | 第1章  |
    01040 | 01 | 第1章  |
    01040 | 02 | 第1章  |

    このデータで確認してみましたが、
    第1章
    01010--00
    01040---00
    |__01
    第1章
    01040---02
    のように分割して表示されています。
    どうやら、1個前と同じ番号だと、切られてしまうようです・・・

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/04/28 16:13

A 回答 (2件)

考え方はいろいろだと思いますが、一度sqlからのデータを表示しやすいよう


別の配列に移し替えて出力するとすこし楽かもしれません。

仮に、SQLからの出力をPDOで処理するとしてこんな感じ?

//初期化
$mydata=array();
$pre=array("章名"=>"","番号"=>"","付属番号"=>"");
$count=array("章名"=>-1,"番号"=>0,"付属番号"=>0);

while($data = $stmt->fetch(PDO::FETCH_ASSOC)){
if($pre["章名"]!=$data["章名"]){
$count["章名"]++;
$count["番号"]=0;
$count["付属番号"]=0;
}elseif($pre["番号"]!=$data["番号"]){
$count["番号"]++;
$count["付属番号"]=0;
}else{
$count["付属番号"]++;
}
$mydata[$count["章名"]]["text"]=$data["章名"];
$mydata[$count["章名"]]["child"][$count["番号"]]["text"]=$data["番号"];
$mydata[$count["章名"]]["child"][$count["番号"]]["child"][$count["付属番号"]]["text"]=$data["付属番号"];
$pre=$data;
}

//とりあえず内容確認
print_r($mydata);

//階層表示
print "<ul>\n";
foreach($mydata as $d1){
print "\t<li>".$d1["text"]."\n";
print "\t<ul>\n";
foreach($d1["child"] as $d2){
print "\t\t<li>".$d2["text"]."\n";
print "\t\t<ul>\n";
foreach($d2["child"] as $d3){
print "\t\t\t<li>".$d3["text"]."</li>\n";
}
print "\t\t</ul>\n";
print "\t\t</li>\n";
}
print "\t</ul>\n";
print "\t</li>\n";
}
print "</ul>\n";
この回答への補足あり
    • good
    • 0

>変数stmtが定義されていないのと、fetchが空?のエラーのようです。



あれ?phpからpostgreにつなぐ方法理解していません?
そのあたりから躓いているのであれば一度入門書から始めた方がよいと思います。

またまだ始めたばかりでPostgreを絶対につかなわなくてはいけないわけではないなら
個人的にはmysqlの方が参考になる書籍やサイトも多いのでよいと思いますが・・・
この回答への補足あり
    • good
    • 0
この回答へのお礼

phpからPostgresqlにpg_connectで繋いでデータ取得等は出来ては居ますが、PDOを使用してうまく接続できていないみたいです。現在は参考書片手に調べつつ、やっております・・・・

私自身1週間程前にphp触り始めたので、あまり分かっていないところもあり、申し訳ありません。
もう少し、試してみます。

お礼日時:2015/04/27 16:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!