人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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から始まります。
年齢検索と同じように会員ナンバーを範囲検索したいです。

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

●質問者: happy778
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:MySQL PHP サイト テンプレート データベース
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● deep_one
●27ポイント

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


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


if ($sUserNoA != "")

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

if ($sUserNoB != "")

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


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



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


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

◎質問者からの返答

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

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

あとはelse {

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


PHP 5.1.6

MySQL - 5.0.45


2 ● pahoo
●27ポイント

ご質問の前後のスクリプトが分かりませんし、どんな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


3 ● pahoo
●26ポイント

あとはelse {

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

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


以下、推測です――。

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ