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

PHP+MYSQLで任意の数を入力し、その入力結果から演算をし、該当するデータを表示させたいです。


例えば以下のようなデータがあるとします。
x y z
--------------
A,14,9
B,23,30
C,45,1
D,56,7

ここで、抽出条件を
・(入力した値a + z)が30以上
・入力した値b±15の範囲内
とします。

入力値aが1、入力値bが15だとすると、2つの条権に該当するのはBだけですので、B,23,30と表示されるような感じです。


プログラムソースをそのまま書いていただいても構いませんし、参考となるページでも構いません。特に・(入力した値a + z)が30以上をどう記述して良いか分かりません。よろしくお願いします。

●質問者: sitterutsumori
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:23 MySQL PHP ソース データ
○ 状態 :終了
└ 回答数 : 11/11件

▽最新の回答へ

1 ● GreenStar
●20ポイント

下記のような具合でSQLを生成します。$a や $b の値を変えてみて、どのようなSQLになるかを見てください。

<?php
$a = 1;
$b = 15;
$s = 'SELECT * FROM テーブル名 WHERE y BETWEEN ' . ($b - 15) . ' AND ' . ($b + 15) . ' AND z >= ' . (30 - $a);
echo $s;
?>

あとは mysql_query($s) でMySQLにSQLを投げて mysql_fetch_assoc などで受けます。

http://jp2.php.net/manual/ja/function.mysql-query.php


2 ● りく
●0ポイント

質問の意味が分からん


3 ● かみ かずしげ
●20ポイント

1つめの「(入力した値a + z)が30以上」というのは、単純に移項して、

30-a <= z

とすればいいのではないでしょうか。

2つめの「入力した値b±15の範囲内」というのは(Yがその範囲内となる条件なら)、

(b-15 <= y) and (y <= b+15)

となります。つまり、入力した値のaとbを変数$aと$b、テーブル名を$table、クエリーの文字列を$queryに入れるとすると、

$query = sprintf("SELECT X, Y, Z FROM %s WHERE (%d <= Z) AND (%d <= Y) AND (Y <= %d)", $table, 30-$a, $b-15, $b+15);

として、$queryを実行すれば条件に一致したレコードが得られる筈です。

◎質問者からの返答

説明が後付で申し訳ないのですが、「(入力した値a + z)が30以上」というのは簡単な例で、実際は複雑な計算を行います。ですので、ポイントはzをどうやってひっぱって計算をするかです。zの値をひっぱってphpでの変数にとかはできないですかね?


4 ● かみ かずしげ
●20ポイント

> 「(入力した値a + z)が30以上」というのは簡単な例で、実際は複雑な計算を行います。

とのことですが、どんなに複雑でもクエリーに書くことができれば書くまでのことですよね? それともクエリーを書く段階では検索条件が決定できないということなのでしょうか?

◎質問者からの返答

入力値より、zを使用して演算を行ってHという値を出します。そのHを範囲の基準とするのですが、Hの算出過程が400行ぐらいありますが、開業とかそのままクエリーに書いてしまってよいのでしょうか?


5 ● GreenStar
●30ポイント ベストアンサー

移項できないほど複雑ならばMySQL側での絞込みとphp側での絞込みの2段階にするしかないですね。

$a = 1;
$b = 15;
$s = 'SELECT * FROM テーブル名 WHERE y BETWEEN ' . ($b - 15) . ' AND ' . ($b + 15);
$r = mysql_query($s);
while ($row = mysql_fetch_assoc($r)) {
 if ($a + $row['z'] >= 30) {
 echo $row['x'] . $row['y'] . $row['z'];
 }
}
◎質問者からの返答

なるほど


1-5件表示/11件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



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