• ベストアンサー

大変困っております。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・=・<・>・等の記述方法の(~の場合~にする)の様な定義付けが分かりません。 先輩方の御助言頂けますでしょうか。 宜しく御願致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • koke29
  • ベストアンサー率58% (114/196)
回答No.12

あ、良かったー 私もPEARの勉強になりましたー ポイントだけ表示なら <? $test = $DB->getAll("SELECT point FROM ".$k_user_table." order by point DESC LIMIT 0,10 "); print_r($test); ?> SELECT のすぐ後が欲しいカラムで、「*」は全カラムってことなんです idとnameとpointっていうカラムが欲しいなら SELECT id,name,point とすればOK。 配列はforとかforeachを使って全件(10件)とも表示するように 繰り返し構文の中に配置すれば宜しいかと思いますー

iinnffoo
質問者

補足

名前とポイント出ました! 有り難う御座います。 ちょっと文字化けしちゃっているので文字コードも確認してみたいと思います。 foreach等の記述で配列を綺麗に出来るのですね^^ すごく助かりました。 ここからは自力で頑張りたいともいます! (まずはforeachを検索してみます。。。ここからでも時間かかりそうです泣)

その他の回答 (11)

  • koke29
  • ベストアンサー率58% (114/196)
回答No.11

あ、さっきの男性のサンプルを書き換えてみたんです PHPでやるなら…と私が書いたやつは全部忘れて削除しちゃって下さい! 良く読まないで口挟んじゃってスミマセン、ホント… <? $test = $DB->getAll("SELECT * FROM ".$k_user_table." order by point DESC LIMIT 0,10 "); print_r($test); //コレ間違ってたので、こっちで。 ?>

iinnffoo
質問者

お礼

多分原因わかった気がします。。。 テーブル「order by point DESC」の中にテーブルがもう一つあると言うか「order by point DESC」に何か加えないと全部抽出してしまっていると言う事は無いですか。。。 order by point DESCで抽出は出来るよとシステム側の人から言われたのでずっとこのまましてたんですけどもしかしたらと思っても見ました。 又はwher等の記述で[point]のみを抽出する様な指定は出来ますか。

iinnffoo
質問者

補足

とんでも御座いません。 色々と教えてくださり他の勉強にもなりました。 そのまま貼りましたら出ました! でも会員情報情報すべて抽出されてしまいました。。。。 これに条件を付けてするとよいですか。 また、テーブルのように綺麗に整列する場合はまた違う記述が別に加わりますか。

  • koke29
  • ベストアンサー率58% (114/196)
回答No.10

連投しまくりでスミマセン ちょっとPEAR勉強してきました $test = $DB->getAll("SELECT * FROM ".$k_user_table." order by point DESC LIMIT 0,10 "); print $test これだとどうなんでしょう?

iinnffoo
質問者

補足

色々有り難う御座います! どこに記述したら良いですか。。。 <php $sql = "SELECT * FROM テーブル名 order by point DESC LIMIT 0,10"; $result = mysql_query($sql,データベース); while ($row = mysql_fetch_array ($result)) { print $row[point]; } ?> この中の同じ部分を入れ替えるのですか。。。 又は先程の男性の抽出ソースの部分の書き換えになりますか。。。 ちなみに先程のPHPからのSQLへ接続する記述は不要になりますか。 お時間御座いましたら宜しくお願致します。

  • koke29
  • ベストアンサー率58% (114/196)
回答No.9

あー さっきの、たぶんダメですねぇ PHPとコネクトの書き方が違うようでした PEARの板で質問出しなおした方が早いかもですねぇ なんだか 申し訳ない

  • koke29
  • ベストアンサー率58% (114/196)
回答No.8

PEARでもコネクトはしてるはずですよー で、ちょっと調べてみたのですが $result = mysql_query($sql,$DB); これだとどうですかね?$DBがコネクトの変数っぽい 何か、遅々として進まぬで申し訳ないです…

  • koke29
  • ベストアンサー率58% (114/196)
回答No.7

$result = mysql_query($sql,データベース); これの指定が間違ってるんじゃないですかねぇ 参考に、とさっき上げたサイトの「MySQL に接続する」の項目見ました? データベースの名前を入れてもダメですよ PHPでやるなら、手順をちゃんと踏まないとデータは取得出来ないです

iinnffoo
質問者

お礼

有り難う御座います。 サイトは意見致しました。 色々複雑に考えてしまいます。 下の様な形式とは別に一からデータベースを取得する記述がPHPでする場合はしなければいけないのですね。。。 <TR bgcolor="#ccffff"><TD bgcolor=""><font color="" size="1"><font color="#000000" size="1">ちゃん</font><?php $man = "男性"; $man = mb_convert_encoding($man,"EUC-JP","SJIS"); $man_count = $DB->getone("SELECT count(*) FROM $k_profile where sex='$man' "); print $man_count; ?>名 サイトを見ても自分には何をどこにどの様に記載していいのかさえ分かりません。 データベースの部分にはローカルホスト・sqlへの接続パス等が入るのですか。 また、 <?php $hostname = "localhost"; $uname = "USERNAME"; $upass = "PASSWORD"; $dbname = "DBNAME"; $tblname = "TABLENAME"; //MySQL に接続する。 if( !$res_dbcon = mysql_connect( $hostname, $uname, $upass) ){ print "MYSQL への接続に失敗しました。"; exit; } これを一つ一つ自分のサイトに合うようにしなければ接続はされないのですよね。。。 ここまで複雑だとは思いませんでした。 上記の男性を抽出しているような感じではやはり無理なのでしょうか。。。 同じ様な感じでテーブル名と条件を変えたらと思うのですけど実際頭では分かっていてもエラーの連続で20時間以上格闘しております。。。

  • koke29
  • ベストアンサー率58% (114/196)
回答No.6

getoneてPEARなんですね 使ったことないので何だかわからなかった どうしてもPEAR使いたいなら私にはアドバイスはもう出来ないです PHPでDBからデータ抽出とかしかやったことないので だから私が今回みたいなことをするなら $sql = "SELECT * FROM テーブル名 order by point DESC LIMIT 0,10"; $result = mysql_query($sql,データベース); while ($row = mysql_fetch_array ($result)) { print $row[point]; } というような処理をするだろうと思います 名前も入れたいなら print $row[名前のカラム名]; とりあえずPHPで処理するなら一つ前のサイト、見てみて下さい

iinnffoo
質問者

お礼

お世話になります。 自分はPEAR等も分かっていないです。。。 まもでPHPでもPEARでも出てくれたらそれで満足です。 作者の方がPEAR専門の様でこの$point_count = $DB->getone("SELECT * FROM $k_user_table order by point DESC");から取得できます。 と言われました。 これ以上は有料なので教えてくれませんでした。。。 教えてくださり有り難う御座います。 <php $sql = "SELECT * FROM テーブル名 order by point DESC LIMIT 0,10"; $result = mysql_query($sql,データベース); while ($row = mysql_fetch_array ($result)) { print $row[point]; } ?> 上記テーブル名とデータベース名を入れ換えてしてみました。 そしたらエラーが出ました(泣)。 ちなみ言い忘れてたんですけど携帯専用のサイトです。 出たエラーはこちらになります。

iinnffoo
質問者

補足

度々申し訳御座いません。 PCからアクセス制限がある様なので無料スペースに出たエラーの写メを載せました。 http://04.mbsp.jp/drprmews-34243-l.php?guid=on

  • koke29
  • ベストアンサー率58% (114/196)
回答No.5

>だからArrlyと言う文字がが出たんでしょうか。。。 どの段階での話かわかんないですけど、配列のデータが取れてる ってことでしょうねぇ(配列をそのままprintしてもArrayしか出ません) たまたま見つけたこのサイトは基本的な操作の勉強に良さそうなので 良かったら一回こちらで色々見てから試してみてはいかがでしょう 必要な関数名とかも出てるので、調べやすいと思います

参考URL:
http://bg.pi-ppi.com/page/n01/index.html
iinnffoo
質問者

お礼

度々失礼致しました。 そして有り難う御座います。 サイトの方拝見しながら試みたいと思います。 すごく助かりました!

iinnffoo
質問者

補足

こちらのエラーが出てしまいました。 http://04.mbsp.jp/drprmews-34244-l.php?guid=on

  • koke29
  • ベストアンサー率58% (114/196)
回答No.4

SELECT * FROM $k_user_table order by point DESC ↑これにプラス「LIMIT」を使ったSQL文を作るのですよ 具体的な使い方は参考URLを参照下さい MYsql 件数 制限 とかで調べたら、色んなサイト出てきますよ

参考URL:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_10.htm
iinnffoo
質問者

お礼

こんにちは。 お世話になります。 SELECT * FROM $k_user_table order by point DESC);の下の列に書いておりました。。。 だからArrlyと言う文字がが出たんでしょうか。。。 出来そうな予感がしてきました。 すぐに試してみます。 サイトの方も教えてくださり有り難う御座います。

iinnffoo
質問者

補足

すみません。 <?php $point_count = $DB->getone("SELECT * FROM ".$k_user_table." order by point DESC "); print $point_count; ?> 「limit 0, 1」を付けてみました。 ("SELECT * FROM ".$k_user_table." order by point DESC limit 0, 1"); でも出ませんでした。。。 limit 0, 1を囲む「"」等は必要ないですか。 また、これに名前も一緒に抽出したい場合はどこに名前の記述が必要になりますか。 色々申し訳御座いません。

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.3

失礼な言い方ですが、もう少し基本を勉強しないと、プログラミングは無理でしょう。質問以前の問題だと思います。 Classは、オブジェクト指向での概念で、ファイルではありません。 getoneは、SELECTの結果の最初の行の最初のカラムを取得します。 具体的には、queryで実行して、繰り返しで1行ずつ持ってきて処理です。 たぶん、今の力ではこの説明もお分かりにならないと思いますが。

iinnffoo
質問者

お礼

お世話になります。 >>具体的には、queryで実行して、繰り返しで1行ずつ持ってきて処理です。 これ自体も分かりません。。。 今回がSQLからの抽出は初めてです。 少しでも何かヒントから元に自分なりに試してみようと思っておりました。 仕組みが分かりなんとなく分かって来た気がします。 有り難う御座いました。

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.2

No1追記です。 情報が少なすぎて具体的なアドバイスができませんが $db->getone(); とありますが、これは、one。つまり1件だけ取得する という意味のメソッドではないのですか? DB関連で何を使ってるのかわかりませんし、もしかしたら自作のclassを作っているのかもしれませんが、メソッド名を見る限り、クエリーした結果の一番最初のレコードのみを返すっていうメソッドではないのでしょうか?

iinnffoo
質問者

お礼

お世話になっております。 メソッド等は自分は分からないんです。。。 GETOLL・GETLOW等色々試してみましたけどエラーになったりして出てくれません。 他の内容をDBから抽出している場合には以下のソースで間違いないようです。() <?php $man = "男性"; $man = mb_convert_encoding($man,"EUC-JP","SJIS"); $man_count = $DB->getone("SELECT count(*) FROM $k_profile where sex='$man' "); print $man_count; ?>名 昨日教えて頂きました内容で試してみましたけど「Arrly」と言う表示が出ています。。。 ソースはこちらになります。 <?php $point_count = $DB->getone("SELECT * FROM $k_user_table order by point DESC"); print $point_count; ?> 結果は「4」と言う数字が一つだけ出ました。

関連するQ&A