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

MYSQLとPHPを使ってサイトを作っているのですが、レコードの件数を調べるのにMYSQLの集約関数COUNTを使ってカウントしようとしているのですがうまくいきません。
どんな風に記述すればいいのか教えて下さい。
それとも,PHPでカウントアップした方がよいのでしょうか?
わかる人お願いします。

●質問者: black_kenchan
●カテゴリ:インターネット ウェブ制作
✍キーワード:MySQL PHP カウント カウントアップ サイト
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● くいっぱ
●10ポイント

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_08.htm


うまくいかないというのはどういうことでしょうか?

group byが必要だとかそういうSQL的な問題ですか?


それとも、、、

是は私のケースですがOracleなどではcountが0件でもレコードを返してくれますが、mySQLはnullを返してくるようです。

先日はまりました。

レコードセットそのもが取れない場合の処理と、

サブクエリなどを用いていてレコードセットは取れるけれどnullが帰ってくるというケースがあると思います。

前者はPHPなどで対応するとして、

後者は

select

ifnull(count(col1),0) cnt


などのようにifnullでもいれてあげるといいですよ。


2 ● uvx
●10ポイント

他のSQL文なら正常に実行できるとすれば、

select count(*) from テーブル名;

でテーブルの全行数を取得できるはずですが、いかがでしょうか?

◎質問者からの返答

select count(*) from テーブル名;

をしてからはどうするのですか?

どう表示していいかわかりません。


3 ● sera_yr
●10ポイント

count で問題ないと思います。

こちらを参照されてはいかがでしょうか

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_08.htm

countを使わない場合は、mysql_num_rows という関数でも取得できます。

http://php.s3.to/man/function.mysql-num-rows.html


4 ● wata5513
●10ポイント

select count(*) as cnt from テーブル名;

としてcntというカラム名でデータを取得すればいいのでは?

関数を使う事で擬似カラム名を定義しないとデータを取得できないことがあります。


5 ●
●60ポイント

列名が分からないので表示の仕方が分からないということでしょうか。

mysql_fetch_rowで値を取得し、配列の1番目(添字0)の値を表示すれば良いです。

mysql_fetch_rowはmysql_fetch_arrayでオプションにMYSQL_NUMを指定した場合と同じで、数値添字を取得します。

以下のサンプルでいかがでしょうか。

<?php
// HTML出力用設定
mb_http_output('UTF-8');
header("Content-Type: text/html; charset=UTF-8");
// 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>MySQL count(*)の表示テスト</title>
</head>
<body>
EOF;
// MySQLに接続 (サーバ名、ユーザーID、パスワードは適宜変更)
$con = mysql_connect("localhost","user","password")
or die("MySQLに接続できません。");
// データベースを選択 (例では test を選択)
mysql_select_db('test');
// SQLで問合せ (例ではテーブル名を sample01 とする)
$sql = "select count(*) from sample01;";
$result=mysql_query($sql);
mysql_close($con);
/*
 結果の有無によって表示を変更
 上記のSQLは結果を1行、1列しか返さないので、
 mysql_fetch_rowで値を取得
 1列目の値は配列の添字0にセットされる
*/
if (!$result){
print "検索結果を取得できませんでした。";
} else {
$row = mysql_fetch_row($result);
print "行数は" . $row[0] . "です。";
}
// HTMLのフッター部分出力
print <<<EOF
</body>
</html>
EOF;
?>

上記の例では数値で取得している、というのを強調するためにmysql_fetch_rowを使用しましたが、関数を使い分けるのが面倒な場合、mysql_fetch_arrayを使っても問題ありません。

mysql_fetch_arrayはオプションで連想配列での取得(MYSQL_ASSOC)、添字配列での取得(MYSQL_NUM)、両方での取得(MYSQL_BOTH)を選べるのですが、デフォルトではMYSQL_BOTHになっています。

ただ、MYSQL_BOTHで取得すると連想配列、添字配列の2つの方法で値を変数に取得しますので、速度を気にするケースではMYSQL_NUMオプションを使用するか、mysql_num_rowを使った方が良いでしょう。

(気にするほどの速度差はないと思いますが。)

参考になれば幸いです。

◎質問者からの返答

出来ました。親切に解りやすく記述して下さって本当にありがとうございます。

助かりました。

関連質問


●質問をもっと探す●



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