以下のようなPHPを作成しました。
が、同じようなコードが繰り返し使われていて、
なんとか簡略化できないかなと考えています。
例えば、↓が10回出てくる。
LEFT(番号,LEN(番号)-2) + '-' + RIGHT (RTRIM(番号), 2) AS 番号2
なにかやり方あるのでしょうか。
見当違いのとこを言っていたらすいません。
******************************************************
作成したPHP
環境:PHP5.2 Apache2.2 SQLserver5
******************************************************
<a href="clip.php?x=a">あ</a><br>
<a href="clip.php?x=ka">か</a><br>
<a href="clip.php?x=sa">さ</a><br>
…
<a href="clip.php?x=wa">わ</a><br>
<?PHP
$cont = mssql_connect("サーバ名","ユーザ名","パスワード");
mssql_select_db('[DB名]', $cont);
if ($_GET['x']=='a') { // あ行
$sql = "select 氏名, 住所, LEFT(番号,LEN(番号)-2) + '-' + RIGHT (RTRIM(番号), 2) AS 番号2 from テーブル名 WHERE (氏名 LIKE N'あ%' OR 氏名 LIKE N'い%' OR 氏名 LIKE N'う%' OR 氏名 LIKE N'え%' OR 氏名 LIKE N'お%') ORDER BY 氏名";
}
if ($_GET['x']=='ka') { // か行
$sql = "select 氏名, 住所, LEFT(番号,LEN(番号)-2) + '-' + RIGHT (RTRIM(番号), 2) AS 番号2 from テーブル名 WHERE (氏名 LIKE N'か%' OR 氏名 LIKE N'き%' OR 氏名 LIKE N'く%' OR 氏名 LIKE N'け%' OR 氏名 LIKE N'こ%') ORDER BY 氏名";
}
if ($_GET['x']=='sa') { // さ行
$sql = "select 氏名, 住所, LEFT(番号,LEN(番号)-2) + '-' + RIGHT (RTRIM(番号), 2) AS 番号2 from テーブル名 WHERE (氏名 LIKE N'さ%' OR 氏名 LIKE N'し%' OR 氏名 LIKE N'す%' OR 氏名 LIKE N'せ%' OR 氏名 LIKE N'そ%') ORDER BY 氏名";
}
……………た行~ら行も同様のコードなので省略…………………
if ($_GET['x']=='wa') { // わ行
$sql = "select 氏名, 住所, LEFT(番号,LEN(番号)-2) + '-' + RIGHT (RTRIM(番号), 2) AS 番号2 from テーブル名 WHERE (氏名 LIKE N'わ%' OR 氏名 LIKE N'を%') ORDER BY 氏名";
}
$rc = mssql_query($sql,$cont);
print("</table>");
while ($array = mssql_fetch_array($rc)) {
print("<tr><td>");
print "".$array["氏名"]."";
print("</td><td>");
print "".$array["住所"]."";
print("</td><td>");
print "".$array["番号2"]."";
print("</td></tr>");
}
print("</table>");
mssql_close($cont);
?>
No.2ベストアンサー
- 回答日時:
配列を使う例です。
<?PHP
$whereArray=Array(
"a"=>Array("あ","い","う","え","お"),
"ka"=>Array("か","き","く","け","こ"),
"sa"=>Array("さ","し","す","せ","そ")
);
$_GET['x']="a"; //テスト
$whereStr="";
if(is_array($whereArray[$_GET['x']])){
foreach($whereArray[$_GET['x']] as $val){
$whereStr.=($whereStr==""?"":" OR ")."氏名 LIKE N'{$val}%'";
}
$whereStr="AND ( {$whereStr} )";
}
$sql = <<<eof
select 氏名, 住所, LEFT(番号,LEN(番号)-2) + '-' + RIGHT (RTRIM(番号), 2) AS 番号2
from テーブル名
WHERE 1
{$whereStr}
ORDER BY 氏名
eof;
print $sql;
?>
ちなみにか行の「がぎぐげご」など濁音半濁音関係は大丈夫ですか?
回答ありがとうございます。
半濁音忘れていました。ご指摘ありがとうございます。
早速修正しましたが、エラーメッセージが出ました。
*******エラーメッセージ**************
Parse error: syntax error, unexpected T_VARIABLE in C:\Program Files\Apache…test.php on line 70
*************************************
クエリを実行できないようなメッセージかと思います。
いただいたコードがよくわからなかったので、
よかったらご教授ください。
*************************************
$whereArray=Array(
"a"=>Array("あ","い","う","え","お"),
"ka"=>Array("か","き","く","け","こ"),
"sa"=>Array("さ","し","す","せ","そ")
);
↑こちらはArrayを二回使っているということでしょうか。
通常であれば、"a"=> "あ"のように使うのかと思いますが、
こちらの場合は、"a"が"あ"から"お"まで置き換える?ということでしょうか。
$_GET['x']="a"; //テスト
$whereStr="";
if(is_array($whereArray[$_GET['x']])){
foreach($whereArray[$_GET['x']] as $val){
$whereStr.=($whereStr==""?"":" OR ")."氏名 LIKE N'{$val}%'";
}
$whereStr="AND ( {$whereStr} )";
}
↑こちらは、(1)IF文の中に(2)foreach文を入れているのでしょうか。
No.3
- 回答日時:
test.php の70行目(もしくは69行目)に何がかいていあるのかが
書いてありませんので状況がわかりかねます。
とにかくサンプルスクリプトをそのまま実行していただき、
動作したら、ホンチャンスクリプトに組み込むという2段階のテストを
してください。
>こちらはArrayを二回使っているということでしょうか。
Arrayの中にArrayを入れることができます。
データ管理上常套的なものですので覚えておくと役にたつとおもいます。
>こちらは、(1)IF文の中に(2)foreach文を入れているのでしょうか。
IFをいれてる理由はforeachでまわす変数が配列でないときは
エラーになるからです。
foreachの中でやっているのは三項演算ってやつですね。
ifでもかけるのでなれないうちは自分のわかる書式をご使用ください
No.1
- 回答日時:
配列に入れて繰り返しを書くとだいぶ違います。
$hoge = array(
"氏名 LIKE N'あ%' OR 氏名 LIKE N'い%' OR 氏名 LIKE N'う%' OR 氏名 LIKE N'え%' OR 氏名 LIKE N'お%'",
"氏名 LIKE N'か%' OR 氏名 LIKE N'き%' OR 氏名 LIKE N'く%' OR 氏名 LIKE N'け%' OR 氏名 LIKE N'こ%'",
...
);
これでも1行で5回(あ~お)ずつ繰り返されていますからもっと簡略化できるでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「A,B組の女子の氏名のよみ。 1 2023/05/16 15:28
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「名前(first name) 1 2023/06/24 13:03
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 第二回模試の3科目の各得点と合 1 2023/04/25 18:02
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<VB.NET>INSERT文でDBにデータ...
-
PHPのSQL文のデバッグ方法とコ...
-
Pro*Cの構文エラー
-
ASPでSQL文を使う場合に。
-
insert1つの処理でもトランザ...
-
データベースに存在するデータ...
-
ResultSetインターフェイスでの...
-
VBA ACCESS SQL...
-
like検索の複数キーワードで、...
-
CakePHPとMySqlを使用していま...
-
JAVA SQLServerException 列名 ...
-
エクセルVBAのデータベース接続...
-
一度検索されたものに対するソ...
-
自作の検索エンジンを作成しま...
-
配列に入ったデータをループを...
-
php mysql接続での書き方
-
SQL文の処理を関数化したいです
-
PHPの記述で値が取れません。
-
checkbokとキーワード検索を組...
-
【ASP.NET】MySQLのテーブルレ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
<VB.NET>INSERT文でDBにデータ...
-
Pro*Cの構文エラー
-
Q&Aサイトを作成していてURLの...
-
ResultSetインターフェイスでの...
-
VBA ACCESS SQL...
-
データベースに存在するデータ...
-
VB.NET エラーになる箇...
-
insert1つの処理でもトランザ...
-
MySQLのINSERT時にたまに重複に...
-
INSERT,DELETEを同時に
-
like検索の複数キーワードで、...
-
PHP&MySQLでの文字列+数列の一...
-
mysqliを使ってデータベースを...
-
PHP初心者です。syntax error, ...
-
PHP+SQLite でSELECT文のWHERE...
-
php MySQL で、更新ボタンを押...
-
SQLインジェクション対策
-
phpでforeach ($stmt as $row)...
-
OR検索を実装したい
おすすめ情報