会員制サイトの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から始まります。
年齢検索と同じように会員ナンバーを範囲検索したいです。
よろしくお願い致します。
ものすごく断片的な情報なのではっきりとは言えないのですが、配列$whereSQLに条件を表す文字列を複数格納しているようです。おそらく、この部分の後ろで条件の文字列を一つにつなぎ合わせている箇所があるのでしょう。
従って同様にsUserNoAとsUserNoBを入力するフォームを作り、$sUserNoAと$sUserNoBと言う変数に読み込んでから(sAgeA,sAgeBについてもどこかで定義されていると思います)
if ($sUserNoA != "")
$whereSQL[] = "UserNo >= " . $sUserNoA;
if ($sUserNoB != "")
$whereSQL[] = "UserNo <= " . $sUserNoB;
という感じで条件を付け足せばいいはずです。
しかしながら、引用されている範囲のプログラムで条件説を組み立てる際にAgeという列が一度も使われていない、標準のPHPでは存在しない関数名が複数見られる、などの点からして、このプログラムはかなり難しいかかれ方をしていると思われます。
プログラム全体を手間をかけて解析するか、作成者に問い合わせることをおすすめします。
ご質問の前後のスクリプトが分かりませんし、どんな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 />
回答ありがとうございます。
範囲検索できるようになりました!
あとはelse {
の後の記述を教えていただきたいのですが、わかりますでしょうか?
PHP 5.1.6
MySQL - 5.0.45
あとはelse {
の後の記述を教えていただきたいのですが、わかりますでしょうか?
#2の回答にも記しましたが、「どんなDBMSを使っているのか、変数$MYSQLは何なのか」分からないと、何とも言えません。
以下、推測です――。
else以前は MySQL 用、else以降のSQL文は PotgresSQL用と思われます。
#2で回答した SQL 文は MySQL, PostgeresSQL を含む一般的なSQLデータベース用の構文になっていますので、else 以降を記述する必要はありません。
回答ありがとうございます。
範囲検索できるようになりました!
あとはelse {
の後の記述を教えていただきたいのですが、わかりますでしょうか?
PHP 5.1.6
MySQL - 5.0.45