• 締切済み
  • すぐに回答を!

COUNTの使い方

MySQL4.0.26とPHPを使ってとあるシステムを構築しています。 AとBというテーブルがあって、それぞれのテーブルに登録してあるレコード数の合計を求めたいのですが、こういう場合はできるのでしょうか? SELECT count(*) FROM テーブルAでテーブルAのレコード数は求められますが、SELECT COUNT(*) FROM テーブルA、テーブルBとするとおかしな件数になってしまいます。 できれば一つのクエリで処理したいと思っているのですが。 初心者的質問ですいません。宜しくお願いします。

共感・応援の気持ちを伝えよう!

  • MySQL
  • 回答数1
  • 閲覧数204
  • ありがとう数1

みんなの回答

  • 回答No.1

難しいかと思います。 SELECT COUNT(*) FROM テーブルA,テーブルB としたとき、正常な回答が得られないのは結合条件がないためです。 この際、Aに100件、Bに50件あるとすると掛け合わせた5000が回答されます。 複数のテーブルから情報を引き出す場合は、通常関連性を明確に指示できる情報が必要となります。 この場合、Bにある「あるデータ」がAに必ず含まれているのであれば、外部参照をしてやれば合計件数は取れるのですが・・・ 全てのA+Aに含まれるB、という計算です。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

早速の回答ありがとうございます。 やはり難しいですか。 AとBのテーブルには何の関連性もないのです。 ちなみにAとBのテーブルを縦に結合した表を作成してPHP側でレコード数を求めようと思うのですが、 SELECT code FROM テーブルA UNION SELECT code FROM テーブルBとしたのですが、レコード数が微妙に違っています。 やはり構文もしくは使い方を間違えていますでしょうか?

質問者からの補足

UNIONの件ですが、解決しました。 UNION ALLとすればよかっただけでした。 とりあえずこっちの方法でやってみます。

関連するQ&A

  • COUNT(*)の使い方

    COUNT(*)の使い方が分からないので質問します。 直接のSQLでCOUNT(*)を使ってレコード数を表示させることはできましたが PHPでのSQLではCOUNT(*)をPHPのソースの変数に代入する方法が分かりません。 $sql = 'SELECT ip, COUNT(*) FROM webdb'; $ret = mysql_query($sql); $rowval = mysql_fetch_row($ret); この場合、$rowval[1] がテーブルwebdbのレコード数だと 思いましたが、間違っているところはございませんか?

    • ベストアンサー
    • MySQL
  • MySQL: 複数テーブルのcount

    複数テーブルの総行数(count値)を取得したいのですが、下記だとテーブルA,B,Cの結果が バラバラに出力されてしまいます。 【入力条件】 mysql> select COUNT(*) AS 列ID from テーブルA      union all      select COUNT(*) AS 列ID from テーブルB      union all      select COUNT(*) AS 列ID from テーブルC; 【出力結果】       +-----+       | 列_ID |       +-----+       |  1  | ←テーブルAの合計:行数       |  2  | ←テーブルBの合計:行数       |  3  | ←テーブルCの合計:行数       +-----+ 総行数:6を一発で取得するには、どのようにしたらよろしいのでしょうか? 大変恐縮ですが、ご教授よろしくお願いいたいます。 <<MySQLのverは5,5です。

    • ベストアンサー
    • MySQL
  • 複数のテーブルの レコード件数所得

    sql初心者です。 php sql4.1を使って テーブルA・テーブルBの総レコード件数を所得がうまくできません。 テーブルAの◇◇が○○の含むレコード件数を所得は SELECT count(*) FROM テーブルA WHERE ◇◇ LIKE ○○ でできました。 テーブルA・テーブルBの◇◇が○○の含むレコード件数を所得はどうすればいいのでしょうか? よろしくお願いいたします.

    • ベストアンサー
    • MySQL
  • mysqlについてサンプルなど教えてもらえませんか

    すいません。今phpなどを使いウェブサイトを作っているのですが、データベースがどうしても 必要となり、参考サイトなどを見ながら作りました。 ほとんどできたのですが、最後に一部データベースの関数などでわからない事があり困っています。 (正直私はプログラムはphp程度が少し分かる程度で、データベースも単純な使い方しかしない 予定なので参考サイトをざっと見ただけでmysqlの事がほとんど分かりません) ググってそれらしい物を探してはいるのですが、私がやりたい事はデータベースから 件数を取りたいだけです。 取った件数をphpで表示したいのですが、何時間やっても良くわかりません。 申し訳ないんですが取り出した後その件数をphpのechoで表示するまでをサンプルとして書いてもらえませんか?(可能であれば「ここでこのような処理が行われている」とコメントがもらえると助かります) データベース関係はphpと違って初心者用のサイトなども無く、書いてある事がほとんど分かりません。 (ここでSELECT COUNT(*)を使うと教えてもらったのですが、SELECT COUNT(*)でググっても サンプルなども出てきません) $pdo = new PDO("mysql:dbname=aaa", "root"); $pdo->query("set names utf8;"); // ------------------------------------------------ $sql = $pdo->query("SELECT COUNT(*) FROM bbb"); $stmt = $pdo->query($sql); $stmt->execute(); $count=$stmt->rowCount(); echo $count; ----------------------------------------------- $result = mysql_query("SELECT COUNT(*) FROM bbb"); $row = mysql_fetch_assoc( $result ); echo $row;

    • ベストアンサー
    • MySQL
  • 複数行のクエリを、まとめて実行するには?mysqli_multi_query()?

    PHPとMySQLの環境です。 複数行のクエリを、まとめて送って取得したいと考えています。 ですが、今試行錯誤しているのですが、うまく行かない状態で、クエリをきちんと実行できません。 処理の流れとしては、 [DBにアクセス]→[2つのクエリの実行]→[データ取得]→[DBをクローズ] でいいのではないかと思ってやっているのですが、 2つのクエリを実行するのはなにやら無理なような記述もウェブ上で拝見しました。 その場合、同じDBの同じテーブル内の異なるデータを取得したいだけなのに、 わざわざ、一度DBにコネクトして、切断、そしてまたコネクトして、切断ということを繰り返さないとダメなのでしょうか。。? そもそも同一PHPファイル内で二度も接続、切断はすべきではないですか? ちなみに、 一つ目のクエリでは、テーブル(table_a)のレコード数をカウントしてPHP側で取得するという流れの処理です。 $query = "SELECT count(*) FROM `table_a`"; もう一つのクエリは、テーブル(table_a)の最新のレコードの、idカラムのidを取得するだけのものです。 $query = "SELECT arrayset FROM `table_a` ORDER BY id DESC LIMIT 1"; この処理を一度のクエリで入れ込むことは可能でしょうか。 それぞれ単独では実行できます。 PHPでこのような関数 mysqli_multi_query() を見つけて色々調べているのですが、 いまだに使用方法がきちんとつかめない状況です。 これで複数のクエリを送ることは可能でしょうか。 アドバイス宜しくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLのテーブル連結でクエリに4分以上かかる

    初めまして、よろしくお願いします。 現在PHPよりアクセスするクエリを作成しています。 mysql> select distinct titles.culumn1, title from articles, titles where user = 'userid' and articles.culumn1 = titles.culumn1 and datetime like '2007-11-18%'; Empty set (4 min 42.79 sec) 上記のようなSQL文を作ってPHPからとCLIのmysqlから実行してみたところ、どちらも結果が出るまでに4分以上かかってしまいます。 テーブル内のレコード数としては以下のようになっています。 mysql> select count(*) from articles; +----------+ | count(*) | +----------+ | 738338 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from titles; +----------+ | count(*) | +----------+ | 34821 | +----------+ 1 row in set (0.00 sec) できればこのクエリの時間を4分から3秒程度にまで短縮したいと考えています。 これは、やはりハードウェアの性能限界なのでしょうか? またはテーブルの連結をせずに一つのテーブルにまとめてしまった方がいいのでしょうか? どなたかヒントでも頂ければ幸いです。 ぜひ、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • count(*)のcountをとりたい

    現在、以下のようなテーブルを扱っているのですが、 +---------+ |accountid| +---------+ |   999| |   999| |   638| |   638| |   638| |   999| |   999| |   638| +---------+ を、ユニークな件数でとろうとしています。 現在は > select count(*) from TABLE group by accountid; +----------+ | count(*)| +----------+ |     4| |     4| +----------+ 2 rows in set (0.00 sec) などとして、「2 rows in set」を読むと言う方法なのですが、それだと人の手を介さないといけないのでどうにか出力結果をダイレクトに取得したいのです。 SQLサーバで使えるらしい select count(*) from (select count(*) from TABLE group by accountid) as AA; と言うSQL文を使っても無理だったので、どなたか方法をご存じないでしょうか???

    • ベストアンサー
    • MySQL
  • PHP,MYSQLで特定例を表示する場合、

    PHP、MYSQLで特定例を表示する場合のsql文が分かりません。 データーベースmeibo no | name | sex | age | 1 | 一郎 | 男 | 20 | 2 | 一子 | 女 | 22 | 3 | 二郎 | 男 | 25 | 4 | 二子 | 女 | 27 | 女のみを表示したい場合を考え以下のようなコードを作りましたが上手くいきません。 <?php //データーベース接続 require_once('../require/dbcon.php'); //件数の表示 $recordSet = mysql_query('SELECT COUNT(sex) AS record_count FROM meibo WHERE sex(女)'); $data = mysql_fetch_assoc($recordSet); echo '<b>','※ 女性メンバー','</b> ('.$data['record_count'].' 人のデーターがあります。)<br /><br />'; //テーブルセット $recordSet = mysql_query('SELECT sex FROM meibo WHERE sex(女)'); while ($table = mysql_fetch_assoc($recordSet)) { echo $table['no']; echo $table['name']; echo $table['age']; } エラーでは $data = mysql_fetch_assoc($recordSet); と、 while ($table = mysql_fetch_assoc($recordSet)) のラインが出るのですが 何が悪いのか良く分かりません。 私の考えではsql文が悪いのではないかと思うのですが、どなたかお教えくださいませ。

    • ベストアンサー
    • PHP
  • PHP/MySQL レコードの件数の取得COUNT

    ホームページを作っています。 レコードを検索したりカテゴリ別に絞り込んだりすることもできるようにしています。 レコードを閲覧しやすくするために、「前へ[0][1][2]次へ」のようなものをつけようとおもっています。 ところが、それをするためにはレコードの全ての数を取得しなければいけません。 全てのレコードを取得してそれからPHPの関数で件数を取得する方法もありますが、処理としてはスマートじゃないと思い、COUNT関数を使うべきなのかなと思いました。 なので、それで組んでみたんですけれど、カテゴリ別で絞り込むときに値が1にしかならないのです。 以下がソースです。 ※#musicNumに件数が入ります。 $textFilterの例「あつい」 $tags_forWhereの例「pop,dance」 $musicNum = mysql_query("SELECT COUNT(*) as cnt FROM contents_tags bt, mymusic b, tags t WHERE (b.number LIKE '%{$textFilter}%' OR b.title LIKE '%{$textFilter}%' OR b.text LIKE '%{$textFilter}%' ) AND bt.TAG_ID = t.ID AND (t.TAG IN ($tags_forWhere)) AND b.number = bt.CONTENT_ID GROUP BY b.number ORDER BY number DESC"); $musicNum = mysql_fetch_assoc($musicNum); $musicNum = $musicNum['cnt']; タグ機能はToxi法を使っています。 どこがおかしいのかご教授願いします。

    • 締切済み
    • PHP
  • count(1)とcount(*)の違い

    初心者です。 以下のSQL文の違い及びcount(1)の1が何を表しているのか 教えて頂けないでしょうか? select count(*) from table select count(1) from table また、参考しやすいサイト等ありましたら教えて頂けないでしょうか?