MySQLからの条件(計算)一致レコードの抽出方法 - PHPプロ!Q&A掲示板
自分なりにネットで調べたのですが、どうにも解決できない問題に直面してしまったので、
皆様の知恵をお貸しいただけたら幸いです。
やりたい事はデータベースのグラフの2点(X,Y)と入力した点(x,y)の比較をし
その距離の少ない順に並べ変え、上位10個を表示させるプログラムを組みたいです。
例えば、データベースは[点], [X], [Y]とし
(A, 3, 4)、(B, 5, 12)、(C, 1, 1) とあるとします。
入力点を[0, 0]とすると、近い順には1.C、2.A、3.B
と表示されるプログラムを組みたいんです。
計算値(距離)は入力点により毎回変わるので
データベースにプリセットできないので、私が考えたのは
①新たに距離の列をデータベースに作成
②[X],[Y]のデータを抽出
③計算
④合計値の列にそれぞれの値を入力
⑤小さい順に並び替え
⑥合計値の列を削除
⑦結果表示
というものです。
具体的に行き詰ったコードを下に添付します。
ご教授いただけると助かります。よろしくお願いいたします。
また、もし上記の方法がまったく遠回りでセンスのないものでしたら、
その指摘もいただけると幸いです。
- //まずは設定
- $user = @ID;
- $pass = @pass;
- $host = @host;
- $database = @database;
- $table = @table;
- //DB接続・データ取得
- $connect = mysql_connect($host, $user, $pass);
- mysql_select_db($database, $connect);
- $sql = "SELECT * FROM $table";
- $rs1 = mysql_query($sql, $db);
- //列を増やす
- mysql_query("ALTER TABLE $table ADD `kyori` text NOT NULL FIRST , $database);
- //各列よりX,Yの値を得て、計算値し、挿入
- while ($row = mysql_fetch_assoc($rs1)) {
- //式は面倒なのでここでは±考慮してないです。
- $dif = (x - $data['X']) + (y - $data['Y']);
- mysql_query("UPDATE INTO $table (`kyori`, `point`, `x`, `y`) VALUES ('$dif', '$data['point']', '$data['X']', '$data['Y']')", $database);
- }
- mysql_free_result($rs1);
- $rs2 = mysql_query("SELECT * FROM $table ORDER BY 'kyori'", $database);
- while ($row = mysql_fetch_assoc($rs2)) {
- echo $row['point']."点";
- echo "距離は".$row['kyori']."です。";
- }
- mysql_query("ALTER TABLE $tbl DROP 'kyori'");
- mysql_free_result($rs1);
この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。





ページのトップへ


kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。