【先着1,000名様!】1,000円分をプレゼント!

たとえばmysqlのレコードが100件あるとして、
それを10件ずつページを分けてphpを使ってページに表示するには
どうすればいいのでしょうか?

googleの検索結果表示のようなかんじです。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

100件程度ならば配列に全データを入れてforeachで回す。

とか。
普通にLimitを使ったほうが簡単でしょうけど。

以下サンプル。適当に作ったから動かないかも。

$p = $_GET['p'];
$p_start = $p*10; # 表示スタート
$p_end = $p_start+10; # 表示終了
$next_p = $p++; # 次のページ
$back_p = $p--; # 前のページ
$i=0;
$all_data_count = ceil(count($data)/10);
foreach ($data as $d) {
if ($p_start <= $i and $i < $p_end) {
print $d;
}
}
if ($back_p >= 0) {
print "<a href=\"${cgi}?p=$back_p\">次へ</a>";
}
if ($next_p <= $all_data_count) {
print "<a href=\"${cgi}?p=$next_p\">次へ</a>";
}
    • good
    • 0

全てのレコード表示は


$sql = "SELECT * FROM tablename";
として、それを10件だけセレクトすると言う場合は
$sql = "SELECT * FROM tablename LIMIT 0,10";
となります。LIMITで取得数を制限出来ます(0件目から10件を取得)。
次の10件、と言う場合は
$sql = "SELECT * FROM tablename LIMIT 10,10";
さらに次の20件と言う場合は
$sql = "SELECT * FROM tablename LIMIT 20,10";
.......

となります。
これをリンクに反映させれば良いです。
例えば
<a href="/?a=0">最初</a>
<a href="/?a=10">10</a>
<a href="/?a=20">20</a>
......

と言う感じです。
変数をGETで渡す場合はSQLインジェクション対策を忘れずに。
参考まで。
    • good
    • 0
この回答へのお礼

ありがとうございました☆
細かな書き込みで、大変わかりやすいです(*^-^)

今後も精進して初心者を早く脱出したいです。
SQLインジェクション対策についても、調べます。

お礼日時:2006/12/04 10:59

MySQLでLimitをつけてデータをわたせばよいでしょう。


PHPのページの過去ログで「mysql limit」とかで検索してみてください
    • good
    • 0
この回答へのお礼

ありがとうございました☆
おっしゃったとおり調べてみます。

お礼日時:2006/12/04 10:58

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q検索結果を指定件数ずつ抽出表示したい。

データベース(以下、DB)は、SQLite2です。
PHPスクリプトの中で利用しています。

なお、本質問はMySQLとして説明して頂いても結構です。
(恐らく、同じような方法で解決できると思いますので。)

考え方が分かりましたら、あとは自分で調べられますので、
その方向性だけを示して下さるというのでも結構です。

さて、質問に移らせて頂きますが、

DBに検索をかけ、ヒットしたレコードを、
ある特定のカラムをもとにソートし、その中の上から指定件数分抽出する
ということをしたいと考えています。

例をあげます。

テーブル名(tbl_siritori)

id word cate
1 りんご 食べ物
2 ごりら 動物
3 らくだ 動物
4 ダック 動物
5 くり 食べ物
6 リス 動物
7 スイカ 食べ物
8 カメ 動物
9 メロン 食べ物

というDBがあったとして、

このDBに、[cate]に「食」という文字が入っているようなデータを、
[id]順に見て、大きな数字のものを上から3件抽出したい場合、
どのような方法(SQL文)が考えられますか。

3件のデータを表示した後、
さらにそれに続く3件のデータを次ページに表示、
さらにそれに続く3件も同様にさらに次ページに表示…(略)

ということをしようと思っています。

1ページに3件、で、何ページにも渡ってデータを3件ずつ出力していく、ということです。

以上のことを実現可能であるSQL文の中でも、
最も一般的なものを教えて下さい。

$query =
"SELECT * FROM tbl_siritori WHERE (cate LIKE '%食%') ~~ごにゃごにゃ~~ ORDER BY id DESC";

というような書き方で、1文で解決できるものと思っていますが、
複数の文で絞り込むような形になるのでしょうか。

以上、よろしくお願いいたします。

データベース(以下、DB)は、SQLite2です。
PHPスクリプトの中で利用しています。

なお、本質問はMySQLとして説明して頂いても結構です。
(恐らく、同じような方法で解決できると思いますので。)

考え方が分かりましたら、あとは自分で調べられますので、
その方向性だけを示して下さるというのでも結構です。

さて、質問に移らせて頂きますが、

DBに検索をかけ、ヒットしたレコードを、
ある特定のカラムをもとにソートし、その中の上から指定件数分抽出する
ということをしたいと考えていま...続きを読む

Aベストアンサー

LIMIT [x,]y
あるいは
LIMIT y OFFSET x

検索条件で絞り込まれ、ORDER BYでソートした結果のx+1行目(先頭は0)からy行を得るという指定です。
ORDER BYがないとMySQLは結果を返す順を保証しないので、LIMITを使用する場合は、通常は必ずORDER BYと組み合わせて使用します。
また、検索条件とORDER BYの組み合わせ等でインデクスを有効利用できれば、インデクス上で「x+1番目からy行」を見つけられるので、性能が極端に落ちません。しかし、逆にインデクスでなく母体データをサーチしなければならないような場合は、母体データ件数が多いと、OFFSETで検索対象をスキップするのに大幅に性能劣化するので注意しましょう。

select ~
from t1
[where 検索条件]
ORDER BY ソートの指定
LIMIT 0,3

とした場合、該当する行の先頭(OFFSET 0)から3行が検索結果として得られます。

select ~
from t1
[where 検索条件]
ORDER BY ソートの指定
LIMIT 3,3

とした場合、4行目(OFFSET 3)から3行が検索結果として得られます。

さらに、7行目からは LIMIT 6,3 といったように指定します。

SELECT文の構文については、下記参照。
http://dev.mysql.com/doc/refman/5.1/ja/select.html

どういった検索条件やORDER BYの指定だと、インデクスを効率的に使用できるかは、下記参照。ただし、MySQLの話しです。
http://dev.mysql.com/doc/refman/5.1/ja/query-speed.html

LIMIT [x,]y
あるいは
LIMIT y OFFSET x

検索条件で絞り込まれ、ORDER BYでソートした結果のx+1行目(先頭は0)からy行を得るという指定です。
ORDER BYがないとMySQLは結果を返す順を保証しないので、LIMITを使用する場合は、通常は必ずORDER BYと組み合わせて使用します。
また、検索条件とORDER BYの組み合わせ等でインデクスを有効利用できれば、インデクス上で「x+1番目からy行」を見つけられるので、性能が極端に落ちません。しかし、逆にインデクスでなく母体データをサーチしなければならないよう...続きを読む

Qmysql>PHPにデータ表示、10件ごとにページ分割

はじめまして、PHP勉強中の初心者です。。
MYSQLから取り出したデータを件数でページ分割したいのですが、
うまくきません。。
環境:eclipse3.5、mysql5.0、php5.0、xampp
(phpで、sql接続、select * from でデータは表示は確認できてます)。。
ソースは↓です。。(初心者なもので不備がればすみません)。。
eclipse上では
if (($page_num+1)*10<$cnt) {}でエラーで表示されます。。
どなたかご存知の方いましたら、教えていただけないでしょうか?

<!--kensaku.html-->
<html>
<body>
<form action ="kensaku.php" method="post">
   名前:<input type="text" name="nm">
   年齢:<input type="hidden" name="page_num" value="0">
   <input type="submit" name="exec" value="検索">
</form>
</body>
</html>

//kensaku.php ソース
<html>
<body>
<?
$nm=$_POST['nm'];
$page_num=$_POST['page_num'];

//データベースに接続
if (!$conn =mysql_connect("","user","PASS")) {
echo "接続エラー" ;
exit ;
}

//データベースを選択
if (!mysql_select_db("table", $con)) {
echo "データベース選択エラー" ;
exit ;
}
//LIMITを使ったSELECT文を作成
$sql = "select id,name from table " ;
$sql.= "where name like '%$nm% ' order by id " ;
$sql.="limit" . $page_num * 10 . ", 10" ;
//SQL実行
if (!$res = mysql_query($sql)) {
echo "SQLエラー<BR>" ;
exit ;
}
//検索結果表示
echo "<table border=1>" ;
echo "<tr><td>id</td><td>name</td></tr>" ;
while($row = mysql_fetch_array($res)){
echo "<tr>" ;
echo "<td>" . $row["id"] . "</td>" ;
echo "<td>" . $row["name"] . "</td>" ;
echo "</tr>" ;
}
echo "</table>" ;
//検索条件に該当する全データの件数取得
$sql = "select count(*) from member " ;
$sql.="where name like '% $nm % ' order by id " ;
if (!$res = mysql_query($sql)) {
echo "SQLエラー<BR>" ;
exit ;
}
$row = mysql_fetch_array($res) ;
$cnt = $row[0] ;

//ページ表示
if(!$cnt > 10)
echo ceil($cnt / 10), "ページの中の", $page_num + 1, "ページ目を表示<br>";

//前の10件
if ($page_num !=0) {
echo "<a href = kensaku.php?nm=".$nm.",".$page_num -1..">";
echo "&lt 前の10件";



//次の10件.--ここからエラー行ですが、、解決策がわかりません。。
if (($page_num+1)*10<$cnt) {
echo "<a href = kensaku.php?nm=".$nm.",".$page_num +1..">";
echo " 次の10件 &g</a>t";



//結果セットの開放
mysql_free_result ($res) ;

//データベースから切断
mysql_close($con) ;
?>
</body>
</html>

すみませんが、ご存知の方いましたら、よろしくお願いいたします。

はじめまして、PHP勉強中の初心者です。。
MYSQLから取り出したデータを件数でページ分割したいのですが、
うまくきません。。
環境:eclipse3.5、mysql5.0、php5.0、xampp
(phpで、sql接続、select * from でデータは表示は確認できてます)。。
ソースは↓です。。(初心者なもので不備がればすみません)。。
eclipse上では
if (($page_num+1)*10<$cnt) {}でエラーで表示されます。。
どなたかご存知の方いましたら、教えていただけないでしょうか?

<!--kensaku.html-->
<html>
<body>
<form acti...続きを読む

Aベストアンサー

連投すみません。

そちらが #2の補足に提示されたソースを PHPエディタにコピペした所、中括弧が全角になっている部分が2ヶ所ありましたが、そちらのソースでは 大丈夫でしょうか?

> }
> //↓↓↓まだここのエラーとeclipseが表示。。
> //次の10件.--ここからエラー行ですが、、解決策がわかりません。。
> if(($page_num+1)*10<$cnt){
> echo "<a href = kensaku.php?nm=".$nm.",".$page_num+1 .">";
> echo " 次の10件 &g</a>t";
> }

もしかして、シンプルなパースエラー?

Qデータベースのページング出力を行うPHPのコード

現在、phpとmySQLを勉強しています。

データベース名:animal、テーブル名:pet、フィールド名が順にID:title:url:scoreで
1:ねこ:neko.com:43
2:いぬ:空白:24
3:空白:空白:空白
4:とり:bird.com:62

というデータがあります。

このとき、
1<a href="neko.com">ねこ</a>43<br>
2<a href=" ">いぬ</a>24<br>
3<a href=" "></a><br>
4<a href="bird.com">とり</a>62<br>

のように10行ずつhtmlに出力するPHPを書こうと思っています。
10行ずつですので、上の例だとURLの最後の書き換えによってpage=2、page=3、…とアクセスできます。


自分でもmysqlを呼び出し、要素を変数に格納して、foreachを使って最後まで順繰りに出力するように作成して、ページングするように作ってみたのですが、どうも正常に出力されません。

考えましたがどうにも原因が不明なので、どなたかこのような動作を示すPHPの模範コードを書いていただけないでしょうか。

PHPは未だ勉強中ですが、教えていただいたコードと自分のコードを比較して、より精進したいと思います。

どうかよろしくお願いします。

現在、phpとmySQLを勉強しています。

データベース名:animal、テーブル名:pet、フィールド名が順にID:title:url:scoreで
1:ねこ:neko.com:43
2:いぬ:空白:24
3:空白:空白:空白
4:とり:bird.com:62

というデータがあります。

このとき、
1<a href="neko.com">ねこ</a>43<br>
2<a href=" ">いぬ</a>24<br>
3<a href=" "></a><br>
4<a href="bird.com">とり</a>62<br>

のように10行ずつhtmlに出力するPHPを書こうと思っています。
10行ずつですので、上の例だとURLの最後の書き換え...続きを読む

Aベストアンサー

簡単なページング機能付きで書いてみました。
細部でなにかしら修正が必要かもしれないのでがんばってください。
(質問文を見るとGETを使うような記述でしたがこれはPOSTで処理してます)
検索機能とか付けてみるのも勉強になると思いますよ。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Pragma" content="No-Cashe">
<meta http-equiv="Cache-Control" content="No-Cache">
<title>リスト</title>
<script type="text/javascript">
<!--
function changepage (page) {
document.forms["linkform"].page.value = page;
document.forms["linkform"].submit();
}
-->
</script>
</head>
<body>
<?php
// MYSQL DB接続パラメータ設定(自分の環境に合わせて設定)
$host=""; // ホスト名
$user=""; // ユーザー名
$pass=""; // パス
$dbname=""; // 使用DB名

// 表示するページの決定
if (isset($_POST["page"])) {
$page=$_POST["page"];
} else {
$page=1;
}
// MYSQLコネクト
mysql_select_db($dbname,mysql_connect($host,$user,$pass)) or die("DBコネクトエラー");
// 1ページ表示最大件数設定
$maxrow=10;
// 全件数を取得
$sql = "SELECT count(*) as count FROM pet";
$result=mysql_query($sql);
$row=mysql_fetch_assoc($result);
$count = $row["count"];
// 表示するページのデータの先頭行と最終ページの値を計算する
$first = (($page-1)*$maxrow);
$maxpage=intval((($count-1)/$maxrow)+1);
// ページリンク作成(表示ページの番号は少し大きくする)
$pagelink = "全".$count."件<br>\n";
for ($i=1;$i<=$maxpage;$i++) {
$pagelink = $pagelink."<a href=\"#\" onclick=\"changepage('".$i."');return false;\">";
if ($i==$page) {
$pagelink = $pagelink."<font size=\"+2\">".$i."</font></a> ";
} else {
$pagelink = $pagelink.$i."</a>\n";
}
}
print($pagelink."<br><hr>");

// 情報を取得
$sql = "SELECT id,title,url,score FROM pet";
$sql = $sql." ORDER BY id limit ".$first.", ".$maxrow;
$result=mysql_query($sql);
while($row=mysql_fetch_assoc($result)) {
?>
<?php print($row["id"]); ?><a href="<?php print($row["url"]); ?>"><?php print($row["title"]); ?></a><?php print($row["score"]); ?><br>
<?php
}
?>
</table>
<form action="list.php" name="linkform" method="post">
<input type="hidden" name="page" value="">
</form>
</body>
</html>

簡単なページング機能付きで書いてみました。
細部でなにかしら修正が必要かもしれないのでがんばってください。
(質問文を見るとGETを使うような記述でしたがこれはPOSTで処理してます)
検索機能とか付けてみるのも勉強になると思いますよ。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Pragma" content="No-Cashe">
<meta http-equiv="Cache-Control" content="No-Cache">
<title>リスト</title>
<script type="text/javascript">
<!--
function ...続きを読む

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

Q検索結果をgoogleのように数件ずつ表示

データベース初心者で申し訳ないのですが、質問失礼いたします。

googleのような検索結果ページで、検索結果を3件ずつ表示し、改ページ(?)をさせたいと思っております。

【web表示例】
1ページ目

3件表示/20件中表示
+------+------+---+
| name | anime | age |
+------+------+---+
| サザエ | サザエさん | 24 |
| マスオ | サザエさん | 29 |
| タラオ | サザエさん | 3 |
+------+------+---+

1234567 //ページ数へのリンクですが、現在表示されている「1」にはリンクをさせません


※あらかじめLIMITで1~3件、4~6件を表示させるというページを作っているやり方でなく、
 検索結果を自動で1ページ、2ページと振り分けてくれるものと考えています。


現在作成しておりますPHP部を、抽出条件など省いてはおりますが下記に表記させていただきました。

<?php
//データベース接続
省略・・・
//検索ワードを取得
$keyword = $_POST['keyword'];

$sql = "SELECT * FROM TABLE1 WHERE '%".$keyword."%' ORDER BY age ";
$result = executeQuery($sql);

//結果セットの行数を取得する
$rows = mysql_num_rows($result);

if($rows){
while($row = mysql_fetch_array($result)) {
$tempHtml .= "<tr>";
$tempHtml .= "<td>".$row["name"]."</td><td>".$row["anime"]."</td><td>".$row["age"]."</td>";
$tempHtml .= "</tr>\n";
}
$msg = $rows."件のデータがあります。";
}else{
$msg = "データがありません。";
}

mysql_free_result($result);

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title></title>
</head>
<body>

<?= $msg ?>
<table>
<?= $tempHtml ?>
</table>

</body>
</html>



他HTMLで検索したあと、上記1ページで検索結果を表示しています。

○件ずつ表示・・・というのは、難しいと調べている時にありましたが、
もっと理解してからでないととは思ったのですが必要となり自分なりに調べて試したものだけでは解決にならず質問の方させていただきました。
が、やはり初心者には難しいでしょうか??

ちなみに、調べていて「CGIで・・・」というものも多かったのですが、
検索ページがPHP+MySQLで作られているので、同じものでと考えています。
今使用しているものがPHP+MySQLなので、こちらでできればと思っております。


何卒宜しくお願い致します。

データベース初心者で申し訳ないのですが、質問失礼いたします。

googleのような検索結果ページで、検索結果を3件ずつ表示し、改ページ(?)をさせたいと思っております。

【web表示例】
1ページ目

3件表示/20件中表示
+------+------+---+
| name | anime | age |
+------+------+---+
| サザエ | サザエさん | 24 |
| マスオ | サザエさん | 29 |
| タラオ | サザエさん | 3 |
+------+------+---+

1234567 //ページ数へのリンクですが、現在表示されている「1」にはリンクをさせません


※あらかじめ...続きを読む

Aベストアンサー

> 各ページを作って次のページへのリンクを手作業で貼っていくみたいなのがあって、まさか全ページ分作るわけにもいかないので、PHPなら全件数を取得して1ページだけ作れば http://~?page=3 と、各ページが作れるのかなと思っておりまして

さすがにそんなことはしませんね。
# データの件数って変わるもんですし。

パラメータから offset 値を作れればいいので、直接offset値を渡してもいいですし、
ページ番号から生成してもいいと思います。

考え方は同じですのでやってみてください。

Qforeachで回った数を表示したい

単純な質問ですみません。
====
//getTestlistは別ファイルで定義済み。
<?
$testlist=getTestlist();
foreach($testlist as $test){
?>


<? } ?>
====
例えば↑こんなふうにforeachで$testlistが存在するだけ回したとします。
そのときに何回まわったか?($testが何件あったか?)だけを表示したいのですが、そんなことってできますか?
表示したい位置は<? } ?>の外側にと考えています。
あさってな質問でしたらすみません。
phpVer 4.3

よろしくお願いいたします。

Aベストアンサー

<?
$testlist=getTestlist();
$n=0;
foreach($testlist as $test){
$n++;
?>
<?}?>

<?=$n?>回
とかでよいかと思います。

途中でbreakなどが無ければ
<? echo count($testlist) ?>でも良いかも知れません。

Q自作PHPブログでの記事を10件ずつ表示する方法に

自作PHPブログでの記事を10件ずつ表示する方法について

http://ponk.jp/php/basic/blog
こちらのサイトさんを参考にPHPで自作のブログを制作しているのですが、
最新の記事10件ずつ表示させたい場合はどのような記述をすれば良いのでしょうか?
具体的に書いて頂けると嬉しいです。
「前ページ」と「次ページ」的なリンクを貼りたいと思っております。
一番最古の記事のページまで行くと「前ページ」リンクも消えるようにしたいのです。

Aベストアンサー

多分、これが参考になるww

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12100402772

QリンクでPOSTデータを送信することは可能ですか?

はじめまして。
Submitボタンを使用せずに<A>リンクでFORMのPOSTメソッドデータを送信することは可能でしょうか?
やはりURLにデータを付加して送信するしかないのでしょうか?
ご教授よろしくお願い致します。

Aベストアンサー

javascript を使えば可能です。大雑把にはこんな感じ。

・パラメータが全部 hidden な form を記述しておく(ブラウザでは表示されない)
・<a href> では、その form を submit するように javascript を記述する

試してないですけど、こんな感じ。

<form name=f method=POST action="http://どこか">
<input type=hidden name=x1 value=v1>
</form>

<a href="javascript:document.f.submit()">リンクから submit</a>

Qテーブルの最後(最新)のレコードを抽出したい

宜しくお願いします。
PHP MYSQL の組み合わせで使っています

以下のようにして、最後のレコードを取り出したいのですが
まったく違う事をしているのかもしれません。

$sql =" select * from テーブル where フィールド='max' " ;

フィールドはauto_incrementで番号を振っています。
これで最大のつもりなのですが・・・。

他にも、レコードを入れた時間も記録したフィールドがあるのですが
どうしてよいか?判りません。

テーブルの最新のレコードを出したいのです。
**その中の一つのフィールドを取り出すのですが、
  それはうまくいっているみたいです 
  (max の所に数字を入れると表示します)

お手数かけますが、どなたかご教授お願いいたします。

Aベストアンサー

#2回答者です。

MySQL 4.1以前(サブクエリを使えない)なら、以下のような方法が考えられます。

select * from 表名
order by 列名 desc limit 1

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング