• 締切済み

php sql文

DB内のデーターをphpで表示させています。 どうしてよいかわからず困っています。 DB内のデーターは id | page_id | cat_id | parent_id | name 1 | 1 | 1 | 0 | AAAAA 2 | 1 | 2 | 1 | BBBBB 3 | 1 | 3 | 2 | CCCCC 4 | 2 | 4 | 0 | DDDDD 5 | 2 | 5 | 4 | EEEEE 6 | 3 | 6 | 1 | FFFFF 7 | 3 | 7 | 6 | GGGGG 8 | 4 | 8 | 3 | HHHHH 9 | 5 | 9 | 2 | IIIII 10 | 5 | 10 | 9 | JJJJJ join等を使用してデーターの一覧表示はできているのですが、 <table> <tr> <th>名前</th> <th>ページID</th> </tr> <tr> <td>AAAAA</td> <td>1</td> </tr> <tr> <td>AAAAA</td> <td>2</td> </tr> <tr> <td>AAAAA</td> <td>3</td> </tr> <tr> <td>AAAAA</td> <td>4</td> </tr> <tr> <td>AAAAA</td> <td>3</td> </tr> </table> と表示されます。 ここで上記の ページIDが1のやつは名前をCCCCC ページIDが2のやつは名前をEEEEE ページIDが3のやつは名前をGGGGG ページIDが4のやつは名前をHHHHH ページIDが5のやつは名前をJJJJJ と表示させたいです。 sql文等はjoinだらけで長くなるため省略させていただきます。 省略部分もありますが、お分かりの方がいらっしゃいましたらsql文などをおしえていただけると助かります。

  • PHP
  • 回答数3
  • ありがとう数0

みんなの回答

  • singlecat
  • ベストアンサー率33% (139/418)
回答No.3

page_idとpage_Name(←仮称)というTableを用意しデータをセットして それをJoinしたら、一番簡単だと思います。

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

>ページIDが1のやつは名前をCCCCC >ページIDが2のやつは名前をEEEEE >ページIDが3のやつは名前をGGGGG >ページIDが4のやつは名前をHHHHH >ページIDが5のやつは名前をJJJJJ どういうロジックで名前が選ばれているか示す必要があります。 たとえば同じpage_idであればidが大きい方が優先ということであればこんな感じ select page_id,name from テーブル where (page_id,id) in (select page_id,max(id) from テーブル group by page_id )

回答No.1

表示させるだけですよね? なら多次元配列に放り込めば表示の方法も分かるかな? //最大登録件数(レコード数) $MaxAdditionals = 65536; //DB接続(dbPath, user, pass, ReLoad, strong) $dbc = @mysql_connect("DBaddress", "username", "userpass"); if(!$dbc){ die("MySQL接続失敗: ".mysql_error()); } //db接続切れてる? if(mysql_ping($dbc)){ //切れてないなら続行、データベースを選択 $db_selected=mysql_select_db("dbname",$dbc); }else{ //切れてるなら失敗コード $db_selected = false; } if(!$db_selected){ die('データベース選択失敗: '.mysql_error()); } //テーブルを作成するクエリ $sql="CREATE TABLE IF NOT EXISTS tbl_name(id varchar(5), page_id varchar(16), cat_id varchar(16), parent_id varchar(16), name varchar(512))"; $res=mysql_query($sql,$dbc) or die("クエリ失敗: ".mysql_error()); //検索用主キー $id=0; //多次元配列に取得する $outputArr[][] = array("id","page_id","cat_id","parent_id","name"); //データがあるなら if($res){ //最大登録件数オーバーでループアウト for ($id = 0;$id < $MaxAdditionals; $id++) { //検索クエリ送信(主キー検索) $sql="SELECT * FROM tbl_name WHERE id = $id"; $res=mysql_query($sql,$dbc) or die("クエリ失敗: ".mysql_error()); //検索結果を配列へ $row = mysql_fetch_array($res); //現在のレコードが空か否か(データの有無) if($row){ //レコードが存在するなら多次元配列に保存 $outputArr[][] = $row; }else{ //空ならロード終了 break; } } } //MySQL接続終了(自動的に閉じられるので省略可ですが) mysql_close($dbc);

関連するQ&A

  • テーブルAにあって、テーブルBにないデータ抽出

    このようなデータのテーブルがあります。 テーブルA key ID ----------------- 1 AAAAA 2 BBBBB 3 CCCCC 4 DDDDD 5 EEEEE 6 FFFFF 7 GGGGG 8 HHHHH 9 IIIII テーブルB key ID ----------------- 1 AAAAA 2 CCCCC 3 EEEEE 4 FFFFF 5 HHHHH 6 IIIII 7 JJJJJ 8 KKKKK 9 LLLLL この場合テーブルAのIDの中で、テーブルBのIDには存在しない行を取り出すのに、プログラムを使わずに取得する方法はありますか? この例だと取得するはずの行は key ID ----------------- 2 BBBBB 4 DDDDD 7 GGGGG になります。 どうかよろしくお願いします。

    • ベストアンサー
    • MySQL
  • webbrowserで特定のタグを取得したい

    VB6もしくはVBAです。 HTMLの中をループしてタグを取得しています。 For Each myTag In myIE.Document.all.tags("TD") 次のようなHTMLがあって"このTD"に含まれるAタグを取得したい場合、 指定のTD内だけでループしてAタグを取得するにはどうしたらいいのでしょうか? <table width="200" border="1"> <tr> <td><a href="#">AAAAA</a><a href="#">AAAAA</a><a href="#">AAAAA</a></td> 'このTD <td><a href="#">BBBBB</a><a href="#">BBBBB</a><a href="#">BBBBB</a></td> <td><a href="#">CCCCC</a><a href="#">CCCCC</a><a href="#">CCCCC</a></td> </tr> <tr> <td>DDDDD</td> <td>EEEEE</td> <td>FFFFF</td> </tr> <tr> <td>GGGGG</td> <td>HHHHH</td> <td>IIIII</td> </tr> </table>

  • HTMLで文とテーブルの間が空く。

    現在HTMLとCSSでホームページを作成しています。 それで文とテーブルの間に意図しない空欄ができてしまいます。 この理由と対策を教えてください。 HTMLは↓ <div id="contents"> <div id="main"> <h2>会社概要</h2>       <table class="table">       <tr>       <th>社名</th>       <td></td>       </tr>       <tr>       <th>所在地</th>       <td></td>       </tr>       <tr>       <th>代表者</th>       <td></td>       </tr>       <tr>       <th>設立</th>       <td></td>       </tr>       <tr>       <th>資本金</th>       <td></td>       </tr>       <tr>       <th>従業員数</th>       <td></td>       </tr>       <tr>       <th>関連会社</th>       <td></td>       </tr>       </table> </div><!-- main end --> <div id="totop"> <p><a href="#top">ページのトップへ戻る</a></p> </div><!-- totop end --> </div><!-- contents end --> です。 この会社概要<h2>と<table>の間に十数行の空欄ができます。 CSSを取り除いてHTMLだけにしても、こう表示されます。 ご回答お願いします。

    • ベストアンサー
    • HTML
  • 複数のファイルを読み込み、1つのファイルとして出力する方法。

    Nakanoです。いつもお世話になっております。 例えばテキストファイルを2つ用意し、1つのテキストファイルとして 出力したいのですが、いまいちやり方が分かりません。出来るのかどうかも 分からないです。(汗) 下にサンプルデータがあります。取り合えず「in1.txt」「in2.txt」 を最終的に『out.txt』の様に仕上げたいのですが… # =in1.txt AAAAA BBBBB CCCCC DDDDD 1,000 2,000 3,000 4,000 1,001 2,002 3,003 4,004 1,010 2,020 3,030 4,040 1,100 2,200 3,300 4,400 =in2.txt EEEEE FFFFF GGGGG HHHHH 5,000 6,000 7,000 8,000 5,005 6,006 7,007 8,008 5,050 6,060 7,070 8,080 5,500 6,600 7,700 8,800 # =out.txt AAAAA BBBBB CCCCC DDDDD EEEEE FFFFF GGGGG HHHHH 1,000 2,000 3,000 4,000 5,000 6,000 7,000 8,000 1,001 2,002 3,003 4,004 5,005 6,006 7,007 8,008 1,010 2,020 3,030 4,040 5,050 6,060 7,070 8,080 1,100 2,200 3,300 4,400 5,500 6,600 7,700 8,800 # ・このデータはタブで区切っています。カンマはない場合もあります。 ・ファイルの中のそれぞれの文字列の数は固定です。行数も固定です。  各文字列の中の文字数はランダムです。  COPYコマンドを利用しても考えてみたのですが、後ろに続いちゃって  上手くいかなかったです。(笑)  Perlだと1つ目のファイルの1行目を配列に入れて、次に2つ目の  ファイルの1行目を配列に入れて、これを一旦出力して、同じ手順の  様な事を行を2行目、3行目、4行目、、とずらして繰り返す。って  感じでイメージしているのですが、どの様にソースを組めばいいのか  分かりませんでした。  どなたかご教授いただけないでしょうか? 宜しくお願い致します。

  • PHPの問題を解いているのですが…

    昨日からずーと悩んでいるのですがfor文で *実際はテーブルを使ってます 値1 44 値2 55 値3 66 値4 77 件数 4件 平均 60.5 と出したいのですが下のプログラムでは出ませんなぜでしょうか? <HTML> <HEAD> <TITLE>for文例問題1</TITLE> </HEAD> <BODY> <table border> <?php $ary1 = array(44,55,66,77); for($i=0;$i<4;$i++) { $a = 44+55+66+77/4; <tr><th>値 $i</th>    <td>44</td></tr> <tr><th>値 $i</th>    <td>55</td></tr> <tr><th>値 $i</th>    <td>66</td></tr> <tr><th>値 $i</th>    <td>77</td></tr> <tr><th>件名</th> <td> $i件</td></tr> <tr><th>平均</th> <td> $a件</td></tr> </table> } ?> </BODY> </HTML> ご存知の方どうか助言お願いします

    • ベストアンサー
    • PHP
  • PHP、mysql、html 表のセル内の文字列の長さによってセル幅が変わる。

    こんばんは。PHP・mysql共に初心者の者です。どなたかお知恵をお貸しください。以下に環境を記します。 Windows2000/sp5 Apache/2.0.55 PHP/5.0.5 MySQL 5.0 mysqlから取り出したレコードを<table>で表形式にて表示する物を作っておりますが、ヘッダ部と表示部を別々に<table>タグで囲んであるせいか、セルの大きさの整合性が取れなくなりました。 表示部では、データの文字列の長さによってそれぞれのセルの大きさが違っている状態です。ヘッダ部と表示部をまとめて<table>タグで囲んだり等、色々と試行錯誤しましたが、行き詰まりました。何か良いアイデアはないものでしょうか? 長くなりますのでwhile文からのソースを晒します。 while ($col = mysql_fetch_array($rst)) { $body .=<<<eof <table> <tr> <td NOWRAP><input type="checkbox" name="chk[]" value="{$col["id2"]}"></td> <td NOWRAP>{$col["id"]}</td> <td NOWRAP><a href='/meibo_view.php?id={$col["id"]}'>$col[name]</a></td> <td NOWRAP>{$col["age"]}</td> </tr> </table> eof; } $body = <<<eof <table> <tr> <th NOWRAP>詳細</th> <th NOWRAP>ID</th> <th NOWRAP>氏名</th> <th NOWRAP>年齢</th> </tr> {$body} </table> eof; mysql_free_result($rst); $con = mysql_close($con); ?>

    • 締切済み
    • PHP
  • 【PHP】smartyとPHPの記述違いとメリット

    smartyというのが、デザインとプログラムを分けれるというので 使ってみたのですが、 //--------------------smarty--------------------- <table border=1> <tr> <th>{$table.title}</th> </tr> {foreach item=result from=$data_list} <tr> <td>{$result[0]}</td> </tr> {/foreach} </table> と、smarty用の記述をHTML内にいろいろ書かなければならず //------------------php---------------------- <table border=1> <tr> <th><?=$table[title] ?></th> </tr> <?php foreach($data_list as $key => $value){ ?> <tr> <td><?= $value ?></td> </tr> <?php } ?> </table> とHTML内にPHPをいろいろ書くのと  あまり大差無い気がして どういう点がよいのがイマイチ分かりません。 smartyは 使う メリットは どういうものがあるのでしょうか。

    • ベストアンサー
    • PHP
  • 二の表の値の計算をしたい。

    いつもお世話になります。 見よう見まねでやっている超初心者です。 下の様なテーブルが二つあるページで テーブルabcの<td>のリンゴ、なす、西瓜の数値を テーブルefgのリンゴ、なす、西瓜の元値の値に 対して+-してその売値の数値を を自動で計算して求めたいと思っています。 <td>?</td>(()内の回答のように) 表の値はどちらも可変します。 jabascriptでなるべくシンプルで簡単にできないでしょうか? ご教授の程、どうぞよろしくお願い致します。 <table id="abc"> <tr> <th>リンゴ</th> <th>なす</th> <th>西瓜</th> </tr> <tr> <td>-20</td> <td>-10</td> <td>+200</td> </tr> </table> <table id="efg"> <tr> <th >ID</th> <th>果物</th> <th>元値</th> <th>売値</th> </tr> <tr> <td>1</td> <td>リンゴ</td> <td>140</td> <td>?(120)</td> </tr> <tr> <td>2</td> <td>リンゴ</td> <td>120</td> <td>?(100)</td> </tr> <tr> <td>3</td> <td>なす</td> <td>40</td> <td>?(30)</td> </tr> <tr> <td>4</td> <td>なす</td> <td>80</td> <td>?(70)</td> </tr> <tr> <td>5</td> <td>すいか</td> <td>800</td> <td>?(1000)</td> </tr> <tr> <td>6</td> <td>すいか</td> <td>1000</td> <td>?(1200)</td> </tr> </table>

  • tableソート

    新着順になっているテーブルをjqueryで名前ごとにまとめることはできますか? スレ   名前   日時 ああ    ここ   2014/1/31 いい    たた   2014/1/20 ああ    ここ   2014/1/10 ああ    ここ   2014/1/01 こんな感じにしたいです ああ    ここ   2014/1/31 └     ここ   2014/1/10 └     ここ   2014/1/01 いい    たた   2014/1/20 html <table width="100%"> <tr> <th>スレ</th> <th>なまえ</th> <th>新着日時</th> </tr> <tbody> <tr><td>ああ</td><td>test1</td><td>2014/01/31</td></tr> <tr><td>いい</td><td>test2</td><td>2014/01/20</td></tr> <tr><td>ああ</td><td>test3</td><td>2014/01/10</td></tr> <tr><td>ああ</td><td>test4</td><td>2014/01/01</td></tr> </tbody> </table> クリックでのソートはいりません。表示したときにソートするのみで結構です よろしくお願いします

  • 重複レコードをグループ化したいけど…。

    度々お世話になってます。 table1 【ID|フィールド1】 [1|AAA] [1|BBB] [2|CCC] [3|DDD] [3|EEE] [3|FFF] というようなテーブルがあるとして、クエリでは <table> <tr><td>1</td><td>AAA<br>BBB</td></tr> <tr><td>2</td><td>CCC</td></tr> <tr><td>3</td><td>DDD<br>EEE<br>FFF</td></tr> </table> …という形で表示したいのです。(理想です) 今までいろいろ試してみて、 $sql = " SELECT ID,フィールド FROM table1 GROUP BY ID "; に行き着きましたが、これだと <table> <tr><td>1</td><td>AAA</td></tr> <tr><td>2</td><td>CCC</td></tr> <tr><td>3</td><td>DDD</td></tr> </table> というように表示され、表示されないレコードが出来てしまいます。 GROUP BYが余計!と言われそうですが、同じIDが複数並ぶのを避けたいのです。 ソースコードは、 print "<table>\n"; print "<tr><th>ID</th><th>フィールド</th></tr>\n";  while( $row = mysql_fetch_array($result) ) {  print "<tr><td>$row[ID]</td><td>$row[フィールド]</td></tr>\n";  } print "</table>\n"; になっている状態です。 $row[フィールド]を書き換えればいいのかな?と思いますが、検索してもそれらしいものは見当たらなかったので質問させていただきました。 心当たりのある方、よろしくおねがいします。

    • ベストアンサー
    • PHP

専門家に質問してみよう