- 締切済み
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文などをおしえていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- singlecat
- ベストアンサー率33% (139/418)
page_idとpage_Name(←仮称)というTableを用意しデータをセットして それをJoinしたら、一番簡単だと思います。
- yambejp
- ベストアンサー率51% (3827/7415)
>ページ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 )
- CyberCypher
- ベストアンサー率73% (39/53)
表示させるだけですよね? なら多次元配列に放り込めば表示の方法も分かるかな? //最大登録件数(レコード数) $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);