PHPで同じページに似た内容のデータベースを表示

このQ&Aのポイント
  • PHPを使用して同じページに似た内容のデータベースを表示する方法について質問します。
  • 現在、PHPを使用して同じデータベース(table)から異なる条件でリストを表示させていますが、より簡単でスマートな方法はないか知りたいです。
  • もし簡単な方法がある場合は、それを何と呼べば検索できるのか教えてください。
回答を見る
  • ベストアンサー

PHPで同じページに似た内容のデータベースを表示

PHPで同じページに同じデータベース(table)から別の条件でリストを表示させています。 もっと簡単でスマートな方法はないか、ご質問させていただきます。 【表示例】 <鈴木さん> 鈴木たろう 090-0000-0000 鈴木まさゆき 080-0000-0000 鈴木あきこ 03-0000-0000 <佐藤さん> 佐藤まさる 090-0000-0000 佐藤ともみ 080-0000-0000 佐藤けいこ 03-0000-0000 【PHP】 <?PHP $sql = "SELECT name, tel FROM table"; $sql .= " WHERE name LIKE '%鈴木%'"; $recordSet = mysql_query($sql); $rows = mysql_num_rows($recordSet); if($rows){ while($row = mysql_fetch_array($recordSet)) { $table .= "".$row['name'].""; $table .= " ".$row['tel']."<br>"; $table .= "\n"; } } echo "<鈴木さん><br>"; echo $table; mysql_free_result($recordSet); ?> <?PHP $sato_sql = "SELECT name, tel FROM table"; $sato_sql .= " WHERE name LIKE '%佐藤%'"; $sato_recordSet = mysql_query($sato_sql); $sato_rows = mysql_num_rows($sato_recordSet); if($sato_rows){ while($sato_row = mysql_fetch_array($sato_recordSet)) { $sato_table .= "".$sato_row['name'].""; $sato_table .= " ".$sato_row['tel']."<br>"; $sato_table .= "\n"; } } echo "<佐藤さん><br>"; echo $sato_table; mysql_free_result($sato_recordSet); ?> 上記のように、同じデータベース(table)から、 「鈴木さん」「佐藤さん」それぞれ条件を設定して表示していますが、 もっと簡単に短いコードで表示させることは可能でしょうか。 また、可能であれば、それを何と呼べば(検索すれば)宜しいのでしょうか。 お願い致します。

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

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

配列にいれてforeachで順次処理すればいいんじゃないでしょうかね $arr = array('鈴木', '佐藤'); foreach ($arr as $val) { $sql = "select name, tel from table where name like '%" . $val . "%'"; $rs = mysql_query($sql) or die('abort'); $hd = false; while($row = mysql_fetch_array($rs)) { if (!$hd) { echo "<" . $val . "さん><br />" . PHP_EOL; $hd = true; } echo $row['name'] . " " . $row['tel'] . "<br />" . PHP_EOL; } } 個人的にはlikeをorで繋いで(かつorder by nameにして)、$row['name']でブレークしながらの処理が好みではありますが・・・

rabbit-kimura
質問者

お礼

>>配列にいれてforeachで順次処理 すいません、ド素人で、地道にやって来たもので、 使った事ありませんでしたっ!! ありがとうございます、できました!!

その他の回答 (1)

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

ちょこっと工夫してこんな感じで <?PHP $arr = array('鈴木', '佐藤'); $sql="select case"; foreach($arr as $key=>$val){ $sql.=" when name like '%".$val."%' then ".$key; } $sql.=" end as name_key"; $sql.=",name,tel from person"; $sql.=" where name regexp '".implode($arr,"|")."'"; $sql.=" order by name_key"; $res = mysql_query($sql); //print $sql; $pre=null; while($row = mysql_fetch_array($res,MYSQL_ASSOC)) { if($row["name_key"]!==$pre) print "<".$arr[$row["name_key"]]."さん><br>\n"; print $row["name"]." ".$row["tel"]."<br>\n" ; $pre=$row["name_key"]; } ?>

rabbit-kimura
質問者

お礼

ありがとうございます!! こんな方法もあるんですね!! 助かりました♪

関連するQ&A

  • データベース内容が表示されない

    <br>検索結果<br> <?php if($num_rows== 0){ $message="該当するデータはありませんでした"; } else $message=$num_rows ."件ヒットしました"; echo $message; ?> <br> <?php while($row = mysql_fetch_array($result));?> <br> <?php echo"{$row['tiiki']}"; ?> <?php print"<td>{$row['syoku']}</td>"; ?> <?php print"<td>{$row['koyou']}</td>"; ?> <?php print"<td>{$row['kai']}</td>"; ?> <br> <a href="html.html">再検索</a> とすると、三件ヒットしました、などは表示されますが、肝心のtiiki,syoku等の情報が表示されず、空白のままです。記述ミス等ありますでしょうか??

    • ベストアンサー
    • PHP
  • PHP,MYSQLで特定例を表示する場合、

    PHP、MYSQLで特定例を表示する場合のsql文が分かりません。 データーベースmeibo no | name | sex | age | 1 | 一郎 | 男 | 20 | 2 | 一子 | 女 | 22 | 3 | 二郎 | 男 | 25 | 4 | 二子 | 女 | 27 | 女のみを表示したい場合を考え以下のようなコードを作りましたが上手くいきません。 <?php //データーベース接続 require_once('../require/dbcon.php'); //件数の表示 $recordSet = mysql_query('SELECT COUNT(sex) AS record_count FROM meibo WHERE sex(女)'); $data = mysql_fetch_assoc($recordSet); echo '<b>','※ 女性メンバー','</b> ('.$data['record_count'].' 人のデーターがあります。)<br /><br />'; //テーブルセット $recordSet = mysql_query('SELECT sex FROM meibo WHERE sex(女)'); while ($table = mysql_fetch_assoc($recordSet)) { echo $table['no']; echo $table['name']; echo $table['age']; } エラーでは $data = mysql_fetch_assoc($recordSet); と、 while ($table = mysql_fetch_assoc($recordSet)) のラインが出るのですが 何が悪いのか良く分かりません。 私の考えではsql文が悪いのではないかと思うのですが、どなたかお教えくださいませ。

    • ベストアンサー
    • PHP
  • 2つのMySQLのテーブルをPHPで同じ行に表示

    MySQL クライアントのバージョン: 5.0.45 phpMyAdmin バージョン情報: 3.2.4-rc1 でデータベースを作成しております。 簡単な例ですが、 PRIMARY=id PHPのテーブルを下記のように表示させたい場合。 ┼─┼──┼──┼ │id │add │name│ ┼─┼──┼──┼ │0 │東京 │田中│ ┼─┼──┼──┼ │1 │長野 │鈴木│ ┼─┼──┼──┼ │2 │大阪 │佐藤│ ┼─┼──┼──┼ │3 │山口 │井上│ ┼─┼──┼──┼ idを共通にしていれば、 「add」はtable1、「name」はtable2の情報を 上記のように表示することは可能なのでしょうか? もし可能であれば、この表示の仕方の名称を教えていただけないでしょうか? (調べるときの検索ワードが分からなくて…すみません) 必要かわかりませんが、PHP上で表示する表の部分はこのように作成しています。 $result = executeQuery($sql); $rows = mysql_num_rows($result); if($rows){ while($row = mysql_fetch_array($recordSet)) { $tempHtml .= "<tr>"; $tempHtml .= "<td>".$row["id"]."</td>"; $tempHtml .= "<td>".$row["add"]."</td>"; $tempHtml .= "<td>".$row["name"]."</td>"; $tempHtml .= "</tr>\n"; } $msg = $rows."件みつかりました"; }else{ $msg = "0件です"; } 経験が浅く、お伝わりにくいことがあったら、申し訳ございません。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • データベース表示結果のデザイン

    データベースの全件検索結果の表示のデザインをしたいと考えているのですがうまくいきません。 PHPのソースは以下の通りです。 <?php mysql_connect('localhost','root','******'); mysql_select_db('AAAAAAAA'); $sql= "select * from ??????"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["renban"]; echo " "; echo $row["tourokubi"]; echo " <br />"; echo $row["title"]; echo " "; echo $row["A"]; echo "-"; echo $row["B"]; echo " "; echo $row["C"]; echo " "; echo $row["D"]; echo " "; echo $row["E"]; echo " "; echo $row["F"]; echo " "; echo $row["G"]; echo "</p><hr />"; } } ?> この検索結果の1つ1つのデータをテーブルで囲んでechoで呼び出したA~Gまでの項目を<tr>や<td>で区切って表のような形にしたいのですがどのようにすればいいでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP+MySQL テーブルが表示されない

    下記のように、MySQLのデータをPHPでテーブル形式で表示しています。 【PHP部分】 $check_sql = "SELECT * FROM table WHERE ( check1 LIKE '%東京%' OR check2 LIKE '%品川%' OR check3 LIKE '%%' ) AND hinichi > NOW( )"; $check_recordSet = mysql_query($check_sql); $check_rows = mysql_num_rows($check_recordSet); if($check_rows){ while($check_row = mysql_fetch_array($check_recordSet)) { $checktable = "<tr>"; $checktable .= "<td>".$check_row["check1"]."</td><td>".$check_row["check2"].$check_row["check3"]."</td>"; $checktable .= "</tr>\n"; } $msg = $check_rows."件みつかりました"; } 【HTML部分】 <?= $msg ?> <table> <?= $checktable ?> </table> $checktable が表示されないのですが、 どうも間違えている箇所がわかりません。 $msgは表示されます。 また、$check_sqlは、PHPMyAdmin上で試していますが、エラーは出ておりません。 ご存じの方いらっしゃいましたら、ご教授お願い致します。

    • ベストアンサー
    • PHP
  • PHPで同じDBから違う内容でカウントを繰り返す

    各クラスに、田中・鈴木・佐藤が何人いるかMySQLのデータベースからカウントし HTMLでテーブルを組んで、それぞれの人数を表示しています。 【カウント用PHP】 $cnt_A = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%田中%' AND class LIKE '%1組%'"; $cnt_recordSet_A = mysql_query($cnt_A); $table_A = mysql_fetch_assoc($cnt_recordSet_A); $A = number_format($table_A['cnt_A']); $cnt_B = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%鈴木%' AND class LIKE '%1組%'"; $cnt_recordSet_B = mysql_query($cnt_B); $table_B = mysql_fetch_Bssoc($cnt_recordSet_B); $B = number_format($table_B['cnt_B']); $cnt_C = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%佐藤%' AND class LIKE '%1組%'"; $cnt_recordSet_C = mysql_query($cnt_C); $table_C = mysql_fetch_Cssoc($cnt_recordSet_C); $C = number_format($table_C['cnt_C']); $cnt_D = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%田中%' AND class LIKE '%2組%'"; $cnt_recordSet_D = mysql_query($cnt_D); $table_D = mysql_fetch_Dssoc($cnt_recordSet_D); $D = number_format($table_D['cnt_D']); $cnt_E = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%鈴木%' AND class LIKE '%2組%'"; $cnt_recordSet_E = mysql_query($cnt_E); $table_E = mysql_fetch_Essoc($cnt_recordSet_E); $E = number_format($table_E['cnt_E']); $cnt_F = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%佐藤%' AND class LIKE '%2組%'"; $cnt_recordSet_F = mysql_query($cnt_F); $table_F = mysql_fetch_Fssoc($cnt_recordSet_F); $F = number_format($table_F['cnt_F']); 【表示用PHP】 +------+-----------------+-------------------+ |----|1組          |2組           | +------+-----------------+-------------------+ |田中|<?PHP print $A ?>人|<?PHP print $D ?>人| +------+-----------------+-------------------+ |鈴木|<?PHP print $B ?>人|<?PHP print $E ?>人| +------+-----------------+-------------------+ |佐藤|<?PHP print $C ?>人|<?PHP print $F ?>人| +------+-----------------+-------------------+         (テーブルはHTMLで作成、コードは略します・・・) 今後、各テーブルにさらに  ・男子の人数/女子の人数 表示例: +------+---------------------------------------------------------------------+...... |田中|<?PHP print $A ?>人(男子:<?PHP print $A_boy ?>/女子:<?PHP print $A_girl ?>)|...... +------+---------------------------------------------------------------------+...... というように増やしていこう思ったのですが、 【カウント用PHP】がすごく長くなってしまって、スマートじゃないのではないかと疑問に思っています。 簡潔なやり方などご存じの方いましたらご教授お願い致します。

    • ベストアンサー
    • PHP
  • phpのページ送りについて

    既出の質問で大変恐縮ですが、どうしても自分の理解力が足りないため、教えてください。 phpでページ送りの機能をつけようと思います。 100件だけ取り出して、あとを 前のページへ|1|2|3|…|次のページへ のようにするのはどうしたらよいのでしょう。 いま組んでいるベースを書きます。 初心者で勉強をしているのですが頭が悪く、できれば下記に合わせて作っていただけますと幸いです。 ================================================================================== $sql2 = "select * from creater"; $result2 = mysql_query($sql2); $rows2 = mysql_num_rows($result2); if($rows2 == 0){ echo "<p>該当データがありません。</p>"; } else { while($row2 = mysql_fetch_array($result2)){ echo "<p><a href=\"creater.php?createrid=",$row2["createrid"],"\">"; echo $row2["creater"]; echo "</a>"; echo "</p>"; } } ================================================================================== 実際のページは ttp://www.game-minzoku.jp/all-creater2.php です。 何とぞ、よろしくお願いいたします。

    • 締切済み
    • PHP
  • mysql>PHPにデータ表示、10件ごとにページ分割

    はじめまして、PHP勉強中の初心者です。。 MYSQLから取り出したデータを件数でページ分割したいのですが、 うまくきません。。 環境:eclipse3.5、mysql5.0、php5.0、xampp (phpで、sql接続、select * from でデータは表示は確認できてます)。。 ソースは↓です。。(初心者なもので不備がればすみません)。。 eclipse上では if (($page_num+1)*10<$cnt) {}でエラーで表示されます。。 どなたかご存知の方いましたら、教えていただけないでしょうか? <!--kensaku.html--> <html> <body> <form action ="kensaku.php" method="post">    名前:<input type="text" name="nm">    年齢:<input type="hidden" name="page_num" value="0">    <input type="submit" name="exec" value="検索"> </form> </body> </html> //kensaku.php ソース <html> <body> <? $nm=$_POST['nm']; $page_num=$_POST['page_num']; //データベースに接続 if (!$conn =mysql_connect("","user","PASS")) { echo "接続エラー" ; exit ; } //データベースを選択 if (!mysql_select_db("table", $con)) { echo "データベース選択エラー" ; exit ; } //LIMITを使ったSELECT文を作成 $sql = "select id,name from table " ; $sql.= "where name like '%$nm% ' order by id " ; $sql.="limit" . $page_num * 10 . ", 10" ; //SQL実行 if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果表示 echo "<table border=1>" ; echo "<tr><td>id</td><td>name</td></tr>" ; while($row = mysql_fetch_array($res)){ echo "<tr>" ; echo "<td>" . $row["id"] . "</td>" ; echo "<td>" . $row["name"] . "</td>" ; echo "</tr>" ; } echo "</table>" ; //検索条件に該当する全データの件数取得 $sql = "select count(*) from member " ; $sql.="where name like '% $nm % ' order by id " ; if (!$res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } $row = mysql_fetch_array($res) ; $cnt = $row[0] ; //ページ表示 if(!$cnt > 10) echo ceil($cnt / 10), "ページの中の", $page_num + 1, "ページ目を表示<br>"; //前の10件 if ($page_num !=0) { echo "<a href = kensaku.php?nm=".$nm.",".$page_num -1..">"; echo "&lt 前の10件"; } //次の10件.--ここからエラー行ですが、、解決策がわかりません。。 if (($page_num+1)*10<$cnt) { echo "<a href = kensaku.php?nm=".$nm.",".$page_num +1..">"; echo " 次の10件 &g</a>t"; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </body> </html> すみませんが、ご存知の方いましたら、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpでmysqlで作成したdbを表示したい。

    現在phpのプログラムの学習を行っています。、 phpmyadminで作成したデータベースを読み込もうとしているのですが、うまくいきません。 参考書やサイトも参考にしたのですが、警告が出ています。 よくわからなくなってきましたので、教えていただきたいです。 ------------------------------------------------------------------------------- ・実行結果 Resource id #31Resource id #40 接続ID: 選択の成否: 結果ID: 行数: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\job\job.php on line 45 ------------------------------------------------------------------------------- ・ソース <?php /*$con = mysql_connect('localhost','root','root') or die("接続できません"); print "接続に成功しました。"; mysql_close($con);*/ $url = "localhost"; $user = "root"; $pass = "***"; $db = "***"; // MySQLへ接続する $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); // データベースを選択する $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。"); // クエリを送信する $sql = "SELECT * FROM t01prefecture"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //結果保持用メモリを開放する mysql_free_result($result); echo "$link"; echo "$sdb"; echo "$result"; echo "$rows"; echo "<br>"; echo "接続ID:<?= $link ?><br />"; echo "選択の成否:<?= $sdb ?><br />"; echo "結果ID:<?= $result ?><br />"; echo "行数:<?= $rows ?><br />"; $recordSet = mysql_query('SELECT * FROM my_items'); while($data = mysql_fetch_assoc($recordSet)){ /*このあたりが45行目 */ echo $data['item_name']; /* ここの値を変える*/ echo '<br>'; } // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。");

    • ベストアンサー
    • PHP
  • MYSQL、PHPを使ってのデータとそのデータ数表示について

    よろしくお願いいたします。 このようなテーブルを組んでいます。  game        maker  マリオ      任天堂  カービィ     任天堂  FF        スクエニ   ドラクエ     スクエニ  ソニック     セガ このテーブルを使って、  任天堂(2)  スクエニ(3)  セガ(1) というように、メーカーが作ったゲームの数がカッコ内ででるように、makerを並べたいと思っています。 これはどのように組んだらよいのでしょうか? ちなみに、今はこのように組んで、(もちろんですが)失敗しています。。 ---------------------------------------------------------------- <?php mysql_connect('***','***','***'); mysql_select_db('***'); $sql = "select * from test"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo $row["maker"]; echo "<br />"; } } ?> ---------------------------------------------------------------- 初歩的な質問で大変恐縮ですが、よろしくお願いいたします!

    • ベストアンサー
    • PHP

専門家に質問してみよう