みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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)から、
「鈴木さん」「佐藤さん」それぞれ条件を設定して表示していますが、
もっと簡単に短いコードで表示させることは可能でしょうか。

また、可能であれば、それを何と呼べば(検索すれば)宜しいのでしょうか。


お願い致します。

投稿日時 - 2012-05-22 21:12:59

QNo.7490453

暇なときに回答ください

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

配列にいれて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']でブレークしながらの処理が好みではありますが・・・

投稿日時 - 2012-05-23 11:56:19

お礼

>>配列にいれてforeachで順次処理

すいません、ド素人で、地道にやって来たもので、
使った事ありませんでしたっ!!

ありがとうございます、できました!!

投稿日時 - 2012-05-24 20:35:30

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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"];
}
?>

投稿日時 - 2012-05-24 00:46:12

お礼

ありがとうございます!!

こんな方法もあるんですね!!
助かりました♪

投稿日時 - 2012-05-25 21:30:25

あなたにオススメの質問