カウントの多い順に表示したい!

このQ&Aのポイント
  • カウントの多い順に表示したい!
  • 質問文章の中で、k_idの数が多い順に並べて表示したい場合、どのようにすればよいか教えてください。
  • k_idの数が多い順にランキングを作成する方法について教えてください。
回答を見る
  • ベストアンサー

カウントの多い順に表示したい!

お世話になっております。 これなんですけど。 k_id の多いランキング順に照合しています。 $result = $DB->execute("select distinct k_id from $k_intro_table"); $total=$result->RecordCount(); これの場合の抽出結果は一番上は一番多いk_id の表示はされているんですけど二番目から順不同になってしまいます。 1 50人 2 9人 3 15人 の様な感じです。 抽出した多い順番に ORDER BY を指定することは出来ますか。 多い順に並べる単なるランキングなんですけど出来ません。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (740/5644)
回答No.1

SQL文をこのようにしてみてください。 SELECT k_id, count( * ) counts FROM $k_intro_table GROUP BY k_id ORDER BY counts DESC

iinnffoo
質問者

お礼

こんにちわ!v(*^^*)v お待ちしておりましたっ! そのまま入れてみたら一発でした(。^_^。) 有り難う御座います!! すごくスッキリ整列になりきもちいいです!!

関連するQ&A

  • 抽出結果にランク付けを・・・と思い・・・。

    初歩的なことですみません。 前回グループによる結果をランク付けの教えていただき出来ました。 大変感謝いたします! 他にも色々取ってみようと思いしていたんですけどできません。 アクセスポイントの多い方を順番にランク付けをするという単純な事なんですけど限界です。 $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
  • inner joinについて

    SQLのデータ抽出方法についてお教え下さい。 TABLE_2をdistinctで重複を無くして、TABLE_1とinner joinさせたいです。 select distinct TABLE_2.id と select TABLE_1.ID from TABLE_1 inner join distinct TABLE_2.ID といったようなことをやりたいです。 TABLE_1 ID 001 001 002 002 002 TABLE_2 ID 001 001 002 002 002 環境はMYSQL5.5になります。よろしくお願いいたします。

  • 「PHP+MYSQLバージョンからの抽出結果をPHPファイルに表示できません」の質問になります。

    すぐに回答を! お世話になっております。 プログラミング初心者のiinnffooと申します。 またまた御助言頂きたく質問に至りました。 質問に入ります。 現在、TPLファイルを呼び出すPHPファイルを使ってMYSQLから会員さんへ送信したメールリストを最新順にDBから抽出したいと思っております。 補足になります。 今回TPLファイルを呼び出すPHPファイルを使っている理由はセッション等のソースが付いているのでそのまま使用しております。 (これが理由かもしれません、TPLのためのソースが抽出を邪魔しているかもです。) 今回の抽出結果を表示するファイルはPHPファイルになりTPLは使用しません。 現在 FATAL eorror RecordCount() が出ているのでソース間違いだと思うんです。 <?PHP //////////////////バックナンバー取得////////////////// $rs=$DB->query("SELECT * FROM ".$k_mail_timer." where sendtime <'$time' ORDER BY num DESC LIMIT 0,20"); $TOTAL=$result->RecordCount(); while($row =$result->FetchRow(DB_FETCHMODE_ASSOC)) ?> <TABLE> <TR><?PHP {$b_num[] = $row[0];} ?> </TR> <TR><?PHP {$row[1] = mb_convert_encoding($row[1],"SJIS","EUC-JP");} ?></TR> <TR><?PHP {$title[] = $row[1];} ?> </TR> <?PHP $smarty->assign("TOTAL",$TOTAL); $smarty->assign("title",$title); $smarty->assign("b_num",$b_num); if($_GET['k_outnum']<>"") { $b_num = $_GET['k_outnum']; ?> <?PHP //指定のデータを取得 $result = $DB->query("SELECT * FROM d_mail_timer where num='$b_num'"); while($row =$result->FetchRow(DB_FETCHMODE_ASSOC)) ?> <TABLE> <TR><?PHP {print_r($row["b_num"]);} ?> </TR> <TR><?PHP {print_r($row["title"]);} ?></TR> <TR><?PHP {print_r($row["msg"]);} ?> </TR> <TR><?PHP {$row[2] = mb_convert_encoding($row[2],"SJIS","EUC-JP");} ?> </TR> <TR><?PHP {$msg = $row[2];} ?></TR> <TR><?PHP {$url = $row[3];} ?> </TR> <?PHP ////■はサイトURLになります。 preg_match_all("/http:..■■■■■■.click_out.php.k_outnum=[0-9]+\&....sid=sid_fuyo/",$msg,$ms); foreach($ms[0] as $messe) { } preg_match_all("/k_outnum=[0-9]+/",$messe,$kid); foreach($kid[0] as $ki) { $ki = str_replace("k_outnum=","",$ki); trim($ki); } $url = $DB->getone("SELECT link_url_e FROM $k_koukoku_table where id='$ki'"); $msg = str_replace($messe,"",$msg); $smarty->assign("title",$title); $smarty->assign("msg",$msg); $smarty->assign("url",$url); }?> </TABLE> たぶん必要ないソースが結構あると思うんですけど・・・ 助けてくださいませんか(☆_☆)

    • 締切済み
    • PHP
  • DBへ追加&更新 追加不能状態です!

    お世話になっております! ユーザー個々に自由に書き込み・更新作業の出来るスペースを作っていたのですが・・・。 会員登録と会員情報の更新の様な仕組みと思っていただければと思います。 更新作業をするソースは完成したのですが追加するソースが出来ません。 と言いますのは、会員個々にDBへ書き込みができないと言う事なんです。 つまり、更新は出来てもそもそもデータが無いので意味が無い状態です。 追加するソースです $result1 = $DB->execute("INSERT INTO $k_koukoku_table values('',k_name='$[2]' where k_name='$id'"); フォームソースです <textarea name="2" rows="1" id="2"><?=$id?></textarea> 多少ソースは省いてます。おそらく追加するプログラムが原因かと思っています。 すでにデータが存在する場合は、データ抽出を行い表示させて、更新を行いデータが存在しない場合は追加をすると言う事になっております。 データ抽出と更新のプログラムは完成しているので記載していません。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • ruby 毎回同じ様なreplace文を書くのイヤ

    db = SQLite3::Database.new('hoge.db') で、 db.execute('replace into table01 (a, b, c, d, e, f, g) values(?, ?, ?, ?, ?, ?, ?)',va, vb, vc, vd, ve, vf, vg); とかって書いてるのですが、 これを、 def replace(table,k,v) db.execute('replace into ' + table + '(' + k.join(',') + ') values('+ k.collect {'?'}'.join(’,’) +')' , ここどうかいたら??) end みたいな事を考えたのですが、vって配列でもらった値をばらばらにdb.executeのパラメータに渡したいのですが、 できませんでして、 replace('table',%w(a, b, c, d, e, f, g),[va, vb, vc, vd, ve, vf, vg]) みたいに使いたいです。 引数が可変のパラメータをそのまま、つぎの関数に渡すみたいな。 なんか、ラクする方法ないですか? ご教授の程、宜しくお願いいたします。

    • ベストアンサー
    • Ruby
  • 異なるデータベース間のリレーション

    phpmyadmin上の異なるデータベース間のテーブルでリレーションをかけたいのですが、うまくいきません。 new_linkフラグをtrueにすることで異なるデータベースを開くところまではできました。 アドバイスいただけないでしょうか。 ※DB1の中にtable1が、DB2の中にtable2がある //失敗する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql = "select * from table1,table2 where table1.id = table2.id"; $result = mysql_query($sql) or die(mysql_error()); メッセージ⇒Table 'DB2.table1' doesn't exist //これは成功する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql1 = "select * from table1"; $result1 = mysql_query($sql,$con1) or die(mysql_error()); $sql2 = "select * from table2"; $result2 = mysql_query($sql2,$con2) or die(mysql_error());

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

    • ベストアンサー
    • PHP
  • 複数行の上位3位を1行に表示

    複数行の上位3位を1行に表示する。 分かる方がいれば教えて下さい。 OS:Windows7 DB:PostgresSQL 8.3 <参照デーブル> 品番  ID   金額    日付 1;    3;   1000000; "2012-08-31" 1;    2;   970000;  "2012-08-18" 1;    1;   970000;  "2012-08-10" 1;    4;   940000;  "2012-08-20" 2;    16;  300000;  "2012-08-25" 2;    13;  300000;  "2012-08-13" 2;    12;  250000;  "2012-08-10" 2;    15;  250000;  "2012-08-18" 2;    14;  200000;  "2012-08-15" 2;    11;  200000;  "2012-08-08" 上記の様なテーブルを、金額が高くかつ時間の速いもの順で、上位3位を1行に表示したいのですが、上手くいかずに困っています。 <抽出したい結果> 品番  ID1   金額1    ID2  金額2   ID3   金額3 1;    3;    1000000;  1;   970000;   2;   970000 2;    13;    300000;  16;  300000;   12;   250000 このように抽出しいたいのですが上手くいきません。 どなたか教えていただけいないでしょうか。 よろしくお願いします。

  • 得られた処理結果を、その前の時点で使いたい。

    echo "項目数".$number; //「下記のwhile文を繰り返した回数」と同値 echo "<br>"; //項目表の作成開始(テーブル形式) echo "<table>"; if($db = sqlite_open($db_pass)){ $query = "SELECT id FROM tbl_test ORDER BY id DESC"; $result = sqlite_query($db, $query); $i = 0; while($data = sqlite_fetch_array($result)){ echo "<tr><td>項目".$data."</td></tr>"; $i++; } sqlite_close($db); } else{die("$dbオープンエラー");} echo "</table>"; //項目表作成完了 $number = $i; //while文を繰り返した回数を変数$numberに格納 //ここで得られた$numberを「項目表」の上で使いたい! /*======================================================== イメージとして、上のようなコードを書きましたが、実際には上のコードでは、言うまでもなくエラーとなります。 項目表を作成する前の時点では、$numberの中身は空っぽなのですから。 なお、ここでは例として、while文の中の処理を簡単なものにしていますが、実際には、100段くらいの長いコードになっています。 現状では、カウントするためだけに短くwhile文を書いて、カウント数を得てそれを使っていますが(以下参照)、賢い方法とは思えないので、質問しました。 ========================================================*/ //カウント用(カウントのみ行う。データ抽出・出力はしない) if($db = sqlite_open($db_pass)){ $query = "SELECT id FROM tbl_test ORDER BY id DESC"; $result = sqlite_query($db, $query); $i = 0; //カウントのみ行うので「$i++;」だけ書く。 while($data = sqlite_fetch_array($result)){ $i++; } sqlite_close($db); } else{die("$dbオープンエラー");} $number = $i; echo "項目数".$number; /*======================================================== そして、ここから、項目表を作るコードを書き始める。 つまり、データベースを開いて、データを抽出する処理を2度も繰り返しているわけです。 私が希望しているのは、1度に、データ抽出とカウントをまとめて行い、カウントで得た数値を、そのカウントの前の時点で使いたいということです。 =========================================================*/ //ここから、項目表の作成開始(テーブル形式) echo "<table>"; //データのみ抽出・出力(カウントは済んでいるため、する必要なし。) if($db = sqlite_open($db_pass)){ $query = "SELECT id FROM tbl_test ORDER BY id DESC"; $result = sqlite_query($db, $query); while($data = sqlite_fetch_array($result)){ echo "<tr><td>項目".$data."</td></tr>"; } else{die("$dbオープンエラー");} echo "</table>"; //項目表作成完了 /*======================================================== 質問内容は以上です。 質問文が長い割には、中身は至ってシンプルです。(笑) どのようなアドバイスを頂けるか分かりませんが、 「参照渡し」などで解決できるのかな??なんて思っています。 どなたか、賢い方法を教えて下さい。お願いします。 ========================================================*/

    • ベストアンサー
    • PHP
  • ファーストサーバのレンタルサーバーについて

    phpMyAdminからMySQLのDBにデータを入力し、単純にSQL文でWeb上にデータ表示させようとしたのですが、 select文で抽出した日本語が"??"表示されてしまいます。 原因が分らず非常に困っています。 皆様のお力を貸していただけると助かります。 宜しくお願いします。 環境は以下の通りです。 Linux 2.6.x PHP 4.4.7 MySQL 5.0.24a [バイナリ スタンダード版] DBの接続照合順序は「ujis_japanese_ci」で作成 PHPファイルはEUCにて作成 ヘッダー部分 <?php header("Content-Type: text/plain; charset=EUC-JP"); define("ENCDB", "EUC-JP"); error_reporting(4); session_start(); ?> <?php $db = mysql_connect( 'fsv12345678.mysql.db.fsv.jp','TEST','TEST') or die('DB接続失敗 = ' . mysql_error()); mysql_select_db( 'kanri', $db) or die('DB選択失敗 = ' . mysql_error()); $query = "select ID, pass, name from kanri"; $result = mysql_query($query); if(mysql_num_rows($result) != 0) { ?> <table width="400" class="style3" border="1" cellpadding="5"> <tr bgcolor="#CCCCCC"> <td width="100">ID</td> <td width="100">PASS</td> <td width="200">名前</td> </tr> <?php while($row = mysql_fetch_array($result)){ ?> <tr valign="baseline"> <td><?= $row["ID"] ?></td> <td><?= $row["pass"] ?></td> <td><?= $row["name"] ?></td> </tr> <?php } mysql_close($db); ?> </table>

    • ベストアンサー
    • MySQL

専門家に質問してみよう