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/01 06:58:18
  • 終了:2009/02/08 07:00:02

回答(3件)

id:deep_one No.1

deep_one回答回数82ベストアンサー獲得回数62009/02/01 07:42:25

ポイント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

pahoo回答回数5960ベストアンサー獲得回数6332009/02/01 07:43:24

ポイント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

pahoo回答回数5960ベストアンサー獲得回数6332009/02/01 16:17:42

ポイント26pt

あとはelse {

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

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


以下、推測です――。

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

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません