- ベストアンサー
大変困っております。PHP DBにお詳しい方宜しく御願致します。
初歩的なことかもしれません。 御助言頂きたいと思いご質問させて頂きます。 ポイントサイトを構築している途中で会員さんのポイント獲得ランキングを昇降順にDBより抽出しようと試みましたが無理でした。 こちらのソースからの後の記述が分かりません。 SELECT * FROM $k_user_table order by point DESC 結局分からぬまま最終的に以下の様にすることが精一杯でした。 ---------------------- <?php $point_count = $DB->getone("SELECT * FROM $k_user_table order by point DESC"); print $point_count; ?> ---------------------- この形でもやはり1件の獲得ポイントのみが出たり或いは一桁のちょっと訳が分からない数字が出たりします。 ポイントの高い順に10位まで表示したいと思っております。 テーブル名はこちらSELECT * FROM $k_user_table order by point DESCで間違いないはずなんですけどDBへの接続等その後のWHERE・=・<・>・等の記述方法の(~の場合~にする)の様な定義付けが分かりません。 先輩方の御助言頂けますでしょうか。 宜しく御願致します。
- みんなの回答 (12)
- 専門家の回答
関連するQ&A
- Arrayってなんですか?
自分は素人でPEARを使った抽出方法とその結果の整列方法を、システム開発者に聞きましたが、やってもまったくうまくいきません。 <? $test = $DB->getAll("SELECT nicname,point FROM ".$k_user_table." order by point DESC LIMIT 0,3 "); print_r($test); ?> 結局こちらで教えていただいた抽出部分の $test = $DB->getAll("SELECT nicname,point FROM ".$k_user_table." order by point DESC LIMIT 0,10 "); は出たのですが、改行もなくArray等と言う訳の分からない文字がやたら出て、かなり血圧が上がります。 $test = $DB->getAll("SELECT nicname,point FROM ".$k_user_table." order by point DESC LIMIT 0,10 "); で抽出した物を、 while($row =$test->FetchRow()) { print $row[0]; print $row[1]; print "<hr>"; } の様な形で整列させるためにはどうしたらよいですか? 現在まで出来てるのは、 <? $test = $DB->getAll("SELECT nicname,point FROM ".$k_user_table." order by point DESC LIMIT 0,3 "); print_r($test); while($row =$test->FetchRow()) { print $row[0]; print $row[1]; print "<hr>"; } ?> です。 と言うか、これで出るとシステム側から言われてますが、エラーばっかり出やがります。 パソコンの中に手を突っ込んでガリガリ揃えてやりたい気分ですね。 短気な私はそろそろやばいです。
- ベストアンサー
- MySQL
- 間違いを教えてください。
エラーが出てしまいます。 <? $test = $DB->getAll("SELECT nicname,point FROM ".$k_user_table." order by point DESC LIMIT 0,3 "); while($row =$test->FetchRow()) { print $row[0]; print $row[1]; print "<hr>"; } ?>
- ベストアンサー
- PHP
- 抽出結果にランク付けを・・・と思い・・・。
初歩的なことですみません。 前回グループによる結果をランク付けの教えていただき出来ました。 大変感謝いたします! 他にも色々取ってみようと思いしていたんですけどできません。 アクセスポイントの多い方を順番にランク付けをするという単純な事なんですけど限界です。 $rs=$DB->execute("SELECT * FROM $k_user_table ORDER BY ac_point DESC"); $total=$result->RecordCount(); while($row =$result->FetchRow()) { $id[] = mb_convert_encoding($row['id'],'SJIS','EUC-JP'); } for($i=0; $i<10; $i++) { print("第".($i+1)."位:".$point[$i]."G"); } この様にとりました。 しかし何かが違うみたいです。 順番に並んでもポイントが取れてなかったり逆にポイントは順番に取れていてもランク付けできてなかったり・・・。 教えてください。まちがいはどこですか。
- ベストアンサー
- PHP
- DBkらの抽出した結果を整列されるためにはどうしたらよいですか。
宜しく御願いたします。 現在のソースになります。 <?php $test = $DB->getAll("SELECT nicname,point FROM ".$k_user_table." order by point DESC LIMIT 0,3 "); print_r($test); ?> 上記の表示結果はこちらです。 Array([0]=>Array([0]=>田中さん[nicname]=>田中さん[1]=>100 [point]=>100 [1]=>Array([0]=>木村さん[1]=>124 [point]=>124 重複を無くして改行を付けたいと思っております。 理想はこちらです。↓ 田中さん 100PT所有 木村さん 124PT所有 の様な感じです。 宜しく御願いたします。
- ベストアンサー
- Perl
- 秀丸でSQLを書く際に SQLの予約語だけ大文字
秀丸でSQLを書く際に SQLの予約語だけを、大文字に変換するよい方法は? たとえば select * from table_1 where id=1 order by id desc; と書いて、マクロを起動すると SELECT * FROM talbe_1 WHERE id=1 ORDER BY id DESC; となるようにするよい方法はありませんか? また、予約語が「強調」されると尚良いです。
- 締切済み
- PostgreSQL
- PHPからMySQL・異なるDBにコピー
PHPからMySQL・異なるDBに接続し同じ構造のテーブルのデータをコピーすることは可能ですか? 以下を実行するとクエリが実行されず「コピーできません」が表示されてしまいます。 どのようにすればコピーできるか教えてください。 $connect1 = mysql_connect("localhost", "user1", "pass1") ; mysql_select_db("db1", $connect1); //db1内にtable1 $connect2 = mysql_connect("localhost", "user2", "pass2") ; mysql_select_db("db2", $connect2); //db2.内にtable2 $sql = "INSERT INTO `db1` . `table1` SELECT * FROM `db2` .`table2`;"; $result = mysql_query($sql, $connect1)or die("コピーできません"); //$result内「$connect1」でも「$connect2」結果は同じです。 //table1とtable2の構造は同じです。
- ベストアンサー
- PHP
- sum()の出力結果順に並び替えをするSQL文
皆さん、こんばんは。 mysql 3.23.49-8.13 を使用しています。 mysql> select name,team_name,sum(point),count(*),max(size),min(size) from data where kind = 'hoge' group by name; とした時、 +------+---------+----------+--------+---------+---------+ | name |team_name|sum(point)|count(*)|max(size)|min(size)| +------+---------+----------+--------+---------+---------+ | hro | | 25 | 2 | 46 | 42 | | hro2 |Project-F| 15 | 1 | 47 | 47 | | hro3 |Project-F| 90 | 5 | 66 | 39 | +------+---------+----------+--------+---------+---------+ という結果が得られるのですが、 +------+---------+----------+--------+---------+---------+ | name |team_name|sum(point)|count(*)|max(size)|min(size)| +------+---------+----------+--------+---------+---------+ | hro3 |Project-F| 90 | 5 | 66 | 39 | | hro | | 25 | 2 | 46 | 42 | | hro2 |Project-F| 15 | 1 | 47 | 47 | +------+---------+----------+--------+---------+---------+ というように、sum(point) 順に並べた結果を得るには、どのようなSQL文を発行したらよいのでしょうか? select name,team_name,sum(point),count(*),max(size),min(size) from data where kind = 'hoge' group by name order by sum(point) desc; ってやれると楽だったんですが・・・・・(^^; お知恵をお貸しください。
- ベストアンサー
- MySQL
- [MYSQL/PHP]同着表示でのランキング表示
現在、ランキングシステムを構築中です。 DBのポイント順にランキングとしてJSONで出力して、 5件目まで行くと、次の5件という風に更新するようなプログラムを作りたいと思います。 また、ポイントが同数のものは同ランクとして出力したいと思っております。 point table ----------------- | ID| POINT | ---------------— | 1 | 100 | | 2 | 50 | | 3 | 50 | | 4 | 20 | | 5 | 20 | | 6 | 10 | | 7 | 80 | | 8 | 70 | | 9 | 40 | |10 | 30 | ---------------— 1回目) http://localhost:8080/ranking/?offset=0 出力: [{"data":[{"rank":1,"id":1,"point":100},{"rank":2,"id":7,"point":80},{"rank":3,"id":8,"point":70},{"rank":4,"id":2,"point":50},{"rank":4,"id":3,"point":50}]}] 2回目) http://localhost:8080/ranking/?offset=5 [{"data":[{"rank":6,"id":9,"point":40},{"rank":7,"id":10,"point":30},{"rank":8,"id":4,"point":20},{"rank":8,"id":2,"point":20},{"rank":10,"id":6,"point":10}]}] 上記のような出力をするのに、必要なMYSQLとPHPの処理を考えているのですが、上手くいきません。 何かアドバイスお願い致します! また何かGETで引き渡すデータは必要でしょうか? $offset = $_GET[‘offset’]; $sql = ‘SELECT id, point FROM point ORDER BY point DESC LIMIT 5 OFFSET ’.$offset; $selectResult = mysql_query($sql ); $rank = 1; $last_score = null; $rank_count = 0; $i = 0; foreach($selectResult as $val){ $rank_count++; if($last_score != $val['point‘]){ $rank = $rank_count; $last_score = $val['point‘]; } $jsonArray[‘data'][$i]['rank'] = $rank; $jsonArray[‘data'[$i]['point'] = $val->point; $jsonArray[‘data'[$i]['userUid'] = $val->user_uid; $i ++; } return json_encode($jsonArray);
- 締切済み
- PHP
- テーブル結合の条件指定について
以下のようなテーブルが3つある場合に2つのテーブルにあるポイントを合計して取得したいと思っています。 ただ、外部結合しているtable_cに条件を与えるとうまく取得できません。 table_cにcdがある場合は条件を指定し、 ない場合は条件を指定しないようにするにはどうすればいいのでしょうか。 【table_a】 id name ------------------ a1 aaa a2 bbb a3 ccc 【table_b】 b_id a_id user_id point --------------------------------- b1 a1 00001 5 b2 a1 00002 2 b3 a3 00007 10 b4 a2 00356 10 【table_c】 c_id user_id cd bonus_point ------------------------------------------------ c1 00001 cd_1 1 c2 00007 cd_2 1 c3 00356 cd_1 1 SELECT table_b.user_id as user_id , (ifnull(table_b.age_count) + ifnull(table_c.bonus_point, 0)) as total_point FROM table_a INNER JOIN table_b ON (table_b.a_id=table_a.a_id) LEFT JOIN table_c ON (table_c.user_id=table_b.user_id) WHERE table_c.cd = 'cd_1' ORDER BY total_point desc ■結果 user_id total_point ----------------------------- 00356 11 00001 6 ■求めたい結果 user_id total_point ----------------------------- 00356 11 00001 6 00002 2 よろしくお願いします。
- ベストアンサー
- MySQL
- ひかりTVを解約したが、チューナーの返却手続きが分かりません。解約後の手続きについて教えてください。
- ひかりTVの契約を解約しましたが、チューナーの返却方法がわかりません。手続きについて詳しく教えてください。
- ひかりTVを利用していましたが、解約したためチューナーを返却する必要があります。チューナーの返却手続きについて教えてください。
補足
名前とポイント出ました! 有り難う御座います。 ちょっと文字化けしちゃっているので文字コードも確認してみたいと思います。 foreach等の記述で配列を綺麗に出来るのですね^^ すごく助かりました。 ここからは自力で頑張りたいともいます! (まずはforeachを検索してみます。。。ここからでも時間かかりそうです泣)