phpからデータベースを検索する場合について質問です。

会員制サイトのphpを利用しているのですが
年齢検索は以下のようになっています。
年齢 = Age
会員ナンバー = UserNo

if ($MYSQL) {
if ($sAgeA != "")
$whereSQL[] = "(YEAR(CURDATE()) - YEAR(Birthday)) - (RIGHT(CURDATE(),5) < RIGHT(Birthday,5)) >= " . $sAgeA;
if ($sAgeB != "")
$whereSQL[] = "(YEAR(CURDATE()) - YEAR(Birthday)) - (RIGHT(CURDATE(),5) < RIGHT(Birthday,5)) <= " . $sAgeB;

}
else {
if ($sAgeA != "")
$whereSQL[] = "date_part('year', age(Birthday)::INTERVAL) >= " . $sAgeA;
if ($sAgeB != "")
$whereSQL[] = "date_part('year', age(Birthday)::INTERVAL) <= " . $sAgeB;
}

下記がテンプレートです。
<input type="text" name="sAgeA" value="__sAgeA__" size="5" __IME_OFF__ class="form">歳~
<input type="text" name="sAgeB" value="__sAgeB__" size="5" __IME_OFF__ class="form">歳<br />
左側のみ入力した場合は完全一致検索

以上です。何歳~何歳までと範囲検索ができます。
会員ナンバーによる検索機能を追加したいのですが、どのように記述したらよいでしょうか?
会員ナンバーは登録者順に1から始まります。
年齢検索と同じように会員ナンバーを範囲検索したいです。

よろしくお願い致します。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2009/02/08 07:00:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:deep_one No.1

回答回数153ベストアンサー獲得回数15

ポイント27pt

ものすごく断片的な情報なのではっきりとは言えないのですが、配列$whereSQLに条件を表す文字列を複数格納しているようです。おそらく、この部分の後ろで条件の文字列を一つにつなぎ合わせている箇所があるのでしょう。


従って同様にsUserNoAとsUserNoBを入力するフォームを作り、$sUserNoAと$sUserNoBと言う変数に読み込んでから(sAgeA,sAgeBについてもどこかで定義されていると思います)


if ($sUserNoA != "")

$whereSQL[] = "UserNo >= " . $sUserNoA;

if ($sUserNoB != "")

$whereSQL[] = "UserNo <= " . $sUserNoB;


という感じで条件を付け足せばいいはずです。



しかしながら、引用されている範囲のプログラムで条件説を組み立てる際にAgeという列が一度も使われていない、標準のPHPでは存在しない関数名が複数見られる、などの点からして、このプログラムはかなり難しいかかれ方をしていると思われます。


プログラム全体を手間をかけて解析するか、作成者に問い合わせることをおすすめします。

id:happy778

回答ありがとうございます。

範囲検索できるようになりました!

あとはelse {

の後の記述を教えていただきたいのですが、わかりますでしょうか?


PHP 5.1.6

MySQL - 5.0.45

2009/02/01 15:50:51
id:pahoo No.2

回答回数5960ベストアンサー獲得回数633

ポイント27pt

ご質問の前後のスクリプトが分かりませんし、どんなDBMSを使っているのか、変数$MYSQLは何なのか、$whereSQLはAND条件でSQLに追加されているのか、といった情報が分からないので、あくまで推測に過ぎませんが、以下のようなコードを追加したらどうでしょうか。

if ($sUserNoA != '')  $whereSQL[] = 'UserNo >= '. $sUserNoA;
if ($sUserNoB != '')  $whereSQL[] = 'UserNo <= '. $sUserNoB;

<input type="text" name="sUserNoA" value="__sAgeA__" size="5" __IME_OFF__ class="form">~
<input type="text" name="sUserNoB" value="__sAgeB__" size="5" __IME_OFF__ class="form"><br />
id:happy778

回答ありがとうございます。

範囲検索できるようになりました!

あとはelse {

の後の記述を教えていただきたいのですが、わかりますでしょうか?


PHP 5.1.6

MySQL - 5.0.45

2009/02/01 15:51:08
id:pahoo No.3

回答回数5960ベストアンサー獲得回数633

ポイント26pt

あとはelse {

の後の記述を教えていただきたいのですが、わかりますでしょうか?

#2の回答にも記しましたが、「どんなDBMSを使っているのか、変数$MYSQLは何なのか」分からないと、何とも言えません。


以下、推測です――。

else以前は MySQL 用、else以降のSQL文は PotgresSQL用と思われます。

#2で回答した SQL 文は MySQL, PostgeresSQL を含む一般的なSQLデータベース用の構文になっていますので、else 以降を記述する必要はありません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません