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

以下のテーブル内容があり
zyun | total_point | point_count
------+-------------+-------------
3 | 50000 | 3
2 | 60000 | 3
1 | 80000 | 1
zyunというフィールドで3となって値を
前のレコードのpoint_countを足して
zyunというフィールドの値を
5にして抽出したいのですがどうしたらいいかわかりますか??
ちなみにpoint_countが1以外の時です。

php4でソースを書いて欲しいのですが
可能でしょうか??
DBはPostgreSQLです。



出力結果が
1位 80000点
2位 60000点
5位 50000点
としたいです。どうしたらいいでしょうか??

●質問者: hopefully
●カテゴリ:就職・転職 コンピュータ
✍キーワード:DB postgreSQL ソース フィールド レコード
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● birdie-brain
●10ポイント

質問ではPHPで、ということでしたが、SQLでも求めている結果を出すことは可能です。

SELECT

1 + ( SELECT COALESCE(SUM(point_count), 0) FROM table_name WHERE zyun < tbl.zyun ) as zyun,

total_point,

point_count

FROM

table_name AS tbl

ORDER BY

zyun

(自分の順位) = (自分より成績が上の件数) + 1

という考え方に基づいた方法です。

◎質問者からの返答

ありがとうございます


2 ●
●60ポイント

point_countはzyunが同じ人の人数というイメージで合っていますでしょうか。

例では80000点が1人、60000点が3人、50000点が3人いると考えました。

単純に点数の順位では80000点が1位、60000点が2位、50000点が3位となってしまうところを、それぞれの点数の人数を考慮し、80000点は1位、60000点は2位、50000点は5位としたいというご要望だと考えたのですが、合っていますでしょうか。

zyunが一意な値(重複がない値)の場合、以下のソースでお望みの出力結果になります。

<?php
$con = pg_connect("適切な接続情報を記入");
// zyunの昇順で検索
$rs = pg_query($con, "select * from total_point order by zyun");
// 結果行数を$maxrowsにセット
$maxrows = pg_num_rows($rs);
// 結果が0行でない場合は処理を実行
if ($maxrows!=0){
// HTML出力
print <<<EOF
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>PostgreSQLを使った順位表示のサンプル</title>
</head>
<body>
EOF;
// テーブルに検索結果をセット
print '<table>'. "\n";
// 順位の値を格納するための変数$rankを作成
// 順位なので初期値は1
$rank = 1;
for ($i = 0; $i < $maxrows; $i++) {
$arr = pg_fetch_array($rs,NULL,PGSQL_ASSOC);
print "\t<tr>\n";
print "\t\t<td>" . $rank . "位</td>\n";
print "\t\t<td>" . $arr['total_point'] . "点</td>\n";
//print "\t\t<td>" . $arr['point_count'] . "人</td>\n";
print "\t</tr>\n";
// 順位にpoint_countの値を足し、次の順位を算出
$rank += $arr['point_count'];
}
// HTML出力
print <<<EOF
</table>
</body>
</html>
EOF;
}
pg_close($con);
?>

文字コードはUTF-8を前提にして書いておりますので、必要に応じて適宜HTML出力部分のmetaタグの内容を書き換えてください。

出力結果のHTMLのソースを見やすくするために\nや\tと書いている部分がありますが、削除しても動作には影響ありません。

一度確認してみてください。

◎質問者からの返答

まさしくその通りです。

めでたく出来ました。

大変ありがとうございます。

関連質問


●質問をもっと探す●



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