MYSQLとPHPを使ってサイトを作っているのですが、レコードの件数を調べるのにMYSQLの集約関数COUNTを使ってカウントしようとしているのですがうまくいきません。

どんな風に記述すればいいのか教えて下さい。
それとも,PHPでカウントアップした方がよいのでしょうか?
わかる人お願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/06/06 11:05:47
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:kuippa No.1

回答回数1030ベストアンサー獲得回数13

ポイント10pt

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でもいれてあげるといいですよ。

id:flets No.2

回答回数3ベストアンサー獲得回数0

ポイント10pt

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

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

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

id:black_kenchan

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

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

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

2006/06/06 01:04:15
id:sera_yr No.3

回答回数123ベストアンサー獲得回数6

ポイント10pt

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

id:wata5513 No.4

回答回数57ベストアンサー獲得回数0

ポイント10pt

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

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

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

id:bonlife No.5

回答回数421ベストアンサー獲得回数75

ポイント60pt

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

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を使った方が良いでしょう。

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

参考になれば幸いです。

id:black_kenchan

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

助かりました。

2006/06/06 11:04:35

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません