phpとmysqlを使用してデータを抽出・集計する方法

このQ&Aのポイント
  • phpとmysqlを使用してデータを抽出・集計する方法について説明します。
  • データベースのテーブルに格納されている日付データを抽出し、集計する方法を紹介します。
  • 具体的なデータ例を示し、2013年の日付データを集計する手順を説明します。
回答を見る
  • ベストアンサー

phpとmysqlで抽出

Mysqlに下記のようにデータがあります。 そこで、このデーター(日付)を 2013年1月1日(2件) 2013年1月2日(1件) 2013年1月3日(1件) 2013年1月5日(2件) のように抽出、集計したいです。 いろいろ考えましたが、ピンときませんorz どうすれば宜しいですか? お願いします。 Mysqlのデータ +--+---+ |ID |Dat| +--+--+ |1 | 20130101| +--+--+ |2 | 20130101| +--+--+ |3 | 20130102| +--+--+ |4 | 20130103| +--+--+ |5 | 20130105| +--+--+ |6 | 20130105| +--+--+

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

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

普通に select Dat, count(*) as Cnt from テーブル名 group by Dat orderby Dat asc; とかで取得して、DatとCntを編集して表示すればいいのでは? http://dev.mysql.com/doc/refman/5.1/ja/select.html

IrohaKujoh
質問者

お礼

ありがとうございます。

その他の回答 (2)

noname#244856
noname#244856
回答No.3

ちょうどドンピシャの記事書いていました。 MySQLで投票を集計してランキングを降順で取得する http://qiita.com/mpyw/items/a7720726a1e1bbc820fb PHPからデータベースを扱う際に関する注意点に関しては下記をどうぞ。 PHPでデータベースに接続するときのまとめ http://qiita.com/mpyw/items/b00b72c5c95aac573b71 おすすめ継承クラス↓ PDO2 / PDOStatement2 https://github.com/Certainist/PDO2

IrohaKujoh
質問者

お礼

ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

どこでつまっているかわかりませんが select Dat,count(*) as count from テーブル group by Dat; で日ごとの件数を拾えばよいのでは? 表示の書式についてはPHP側で処理した方が楽だと思います

IrohaKujoh
質問者

お礼

ありがとうございます。

関連するQ&A

  • PHP+MySQL PDOで上手く抽出するには?

    PDOでクエリを実行する際にIN句で該当するカラムを複数取得したいのですがうまく抽出できません。 下記のSQL文で抽出するとid = '104' の1件のみ抽出できて id = '101' と '103' は抽出できないのです。 $param = array(101, 103, 104); $place_holders = implode(',', array_fill(0, count($param), '?')); $wbl = $pdo->prepare("SELECT id FROM tables WHERE id IN ($place_holders)"); $wbl->execute($data); $ecs = $wbl->fetchAll(); foreach ($ecs as $val) { $result = $val; } print_r($result); 試しにphpMyAdmin上で直接クエリを実行すると抽出できるのですが PDOで残りの101と103を取得するにはどうしたら良いでしょうか? 何か良い方法はありますでしょうか? どうぞ宜しくお願いします。m(__)m

    • ベストアンサー
    • PHP
  • MySQLの日付データについて

    PHPでMySQLから日付データを表示しようとしているのですが、日付フィールドの値をvarcharにしてしまいました。 このような状況下での質問なのですが、varcharフィールドに2006年1月1日と2006年2月1日と2006年11月1日がある場合、PHPで日付データを表示するとこのような順番で表示されてしまいます。 2006年1月1日 2006年11月1日 2006年2月1日 下記のようなカレンダー順の表示にするにはどのような方法があるでしょうか? 2006年1月1日 2006年2月1日 2006年11月1日 また、下記の質問と回答を拝見したのですが、日付データはタイムスタンプで処理するのが一般的なのでしょうか? http://oshiete1.goo.ne.jp/qa1396724.html その場合、フィールドタイプをDATEにしておいて、PHPからMySQLに書き込む際はどのような形式が正しいのでしょうか? 2006/1/1のまま書き込んでも自動的にタイムスタンプに変換してくれるのでしょうか。 最後に私のような初心者がMySQLを勉強する際にお勧めの書籍やウェブサイトなどありましたら是非教えて頂けると幸いです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • MySQL 複数フィールドで不一致の抽出

    ジャンル  id ジャンル名 日 数 id ----+---------------+--------------+---------+------- 001 ワンピース 20110518 10 a001 001 ワンピース 20110518 6 a002 002 アクセサリー 20110518 5 b002 仮に、このようなデータがあったとします。 数時間後には、↓のように変更がかかって送られてきます。 001 ワンピース 20110519 7 a001 001 ワンピース 20110518 6 a002 002 アクセサリー 20110519 9 b002 データ配布元の問題で、内容が更新された時点で、まだデータが確定していないものは、前日のデータが混ざって送られてきます。 この仕様を改良することは、残念ながら全く不可能です。 しかし、このデータをそのままテーブルに取り込んでしまうと、当然、2行目が重複してテーブルに収まってしまい、その後のデータ抽出に支障がでます。 例の場合でいえば、既に存在している2行目のデータを捨て、1行目と3行目のみを抽出する方法を探しています。 そこで、全部のデータを持つのをテーブル1とし、新しく着いたデータ(0519を含む方)をテーブル2に一時保管て、 SELECT テーブル2.ジャンルid, テーブル2.ジャンル名, テーブル2.日, テーブル2.数, テーブル2.ID FROM テーブル2 LEFT JOIN テーブル1 ON (テーブル2.ID = テーブル1.ID) AND (テーブル2.数 = テーブル1.数) AND (テーブル2.日 = テーブル1.日) AND (テーブル2.ジャンルid = テーブル1.ジャンルid) WHERE (((テーブル1.ジャンルid) Is Null)); と不一致SQLをAccessで行ったところ、1行目と3行目までが抽出できました。 ジャンルid、日、数、id が一致しないものを取りだすという不一致クエリの改造です。 ところが、同じSQLを、本番であるMySQLで行ったところ、データが抽出できす、反応が無くなってしまいます。 サンプルでは件数を絞りましたが、実際には1回分のデータが1万件近くあり、さらにメインテーブルは60万件ほどになるため、量が多すぎるためとも思いますが、4時間経ってもクエリの結果が返って来ないのは、MySQLとなにか合わないのではないかと思います。 MySQLで、上記と同じく、ジャンルid、日、数、id の全てが一致しないデータを抽出する事は可能でしょうか? ちなみに、MySQLテーブルでは、idの前にインクリメントのフィールドを置き、インデックスもインクリメントのフィールドで作成してあります。 よろしくお願いします。

  • mySQLの抽出条件について

    いつもお世話になります。 mySQLの検索方法について教えて頂けたらと思います。 検索したい条件は現在より6ヶ月以前に登録されたレコードを抽出したいのです。 いろいろ調べてはみたのですが・・・ 環境 mySQL Ver.5.0 ID(INT)auto_increment|CONTENTS(TEXT)|登録日(timestamp)ON UPDATE CURRENT_TIMESTAMP| 1|あああああ|2007-06-03 10:44:24| 2|いいいいい|2008-06-02 10:44:24| ・・・ 上記のような構造になっており、例えば、6ヶ月以上前の登録日のデータを抽出したいのですが、いろいろ試してみたもののうまく抽出できません。どなたか知恵をお借りできたらと思いますので、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • エクセルデータ抽出(日付)

    はじめまして、エクセルの関数とか殆ど分かりません。 そこで、以下内容の事をしたいのですが、どうすれば良いでしょうか? 前提 日付を入力した「元データ」があります。下記(1)~(3)を対応して「抽出データ」を作成したいです。 元データ 抽出データ 番号 日付 金額 番号 日付 金額 1 平成23年9月18日 \60,000 1 平成23年9月18日 \60,000 2 平成23年11月2日 \70,000 3 平成23年10月15日 \90,000 3 平成23年10月15日 \90,000 4 平成23年10月13日 \150,000 4 平成23年10月13日 \150,000 ⇒ 5 平成23年11月29日 \200,000 6 平成23年11月1日 \80,000              合計 \300,000   (1)今日より3ヶ月以内(月末〆)のデータのみ抽出する。 (2)抽出データの金額を計算する。 (3)抽出データを別のシートに作成する。 (1)~(3)を実行する方法を教えて下さい。

  • 集計クエリでの抽出条件

    アクセスのクロス集計で質問なのですが・・・ 日付ごとの集計を行いたいのですが日付が21日締めで行いたいのです。 フォームで年と月を入れるとその月の集計を行いたいのです。 (例:フォームの日付入力2008/01と入力→集計クエリで2007/12/21~2008/01/20までの集計) この場合、抽出条件はどのように行えばよいのでしょうか

  • 選択クエリの抽出条件(日付の場合)

    Access2002 windows2000 日付のフィールドから選択クエリを使って、或る年度のデータを抽出するとき抽出条件に1月1日から12月31日までを入力しています。 例えば2001年のデータを抽出する場合は 抽出条件に Between #2001/01/01# And #2001/12/31# と入力しています。 これは「2001年1月1日から2001年12月31日までに該当するデータを抽出しなさい」という事ですが、年度を指定する場合は1月1日から12月31日までという事は決まっているので、もっと簡単に抽出条件を入力する方法はありませんか?

  • access2003のクリエでの抽出について

    エクセルデータをテーブルにインポートしました。 そのあと、クリエの「クロス集計~」に進み、行の抽出まではできるのですが、列の抽出で私は 4月、5月、6月という表にしたいのですが、日付まで入った表になります。 元々のエクセルデータが日付まで入っているからですか? 初めて使ったので、エクセルデータの項目を「年月日」と入力しているのを、「年月」に変更しましたがダメでした。 素人ですいません。 どうすれば、月ごとの集計表になりますか? あと、テーブルもインポートエラーになります。 アクセスの意味が分かっていないので機械的にやっています。 教えてください。困ってます。

  • 特定のデータを抽出するには?

    perlにて入力されたカウント数値の集計を取っていますが、その集計を表したいと考えています。 表の内容は、指定した月のデータです。 (1日は○カウント、2日は○カウント・・・といった感じで、その月の1日から末日までのカウント数) 照会するデータは、1年分です。 上記に基づき、次のようなデータ(年,月,日-カウント数値)があるのですが、特定の月のデータだけ抽出して配列に格納し、表を作成するには、どうすればよいのでしょうか? 例 2004,1,1-1234 2004,1,5-987 2004,2,3-567 2004,2,24-837 2004,2,30-567 2004,3,24-700 ・ ・ ・ ・ どのように書いたらいいのかわかりません。 よろしくおねがいします。

    • ベストアンサー
    • CGI
  • 同じ日にちの件数を制限して抽出する

    日付ごとのデータがあり、同じ日付の数は日によって違い、10個の時も20個の時もあります。 そのデータを、同じ日付のデータは14個以下に制限し、それ以上は無視して別シートに抽出したいのですが。(エクセル2010) 下記のようなシート1のデータを      A     B     C 1  11月1日  りんご   A社 2  11月1日  みかん  C社 3  11月1日  とまと   B社 ・ ・ 14 11月1日  みかん  D社 15 11月1日  とまと   H社 16 11月2日  ばなな   B社  17 11月2日  りんご   D社 別シートに下記のように抽出      A     B     C 1  11月1日  りんご   A社 2  11月1日  みかん  C社 3  11月1日  とまと   B社 ・ ・ 14 11月1日  みかん  D社 15 11月2日  ばなな   B社 16 11月2日  りんご   D社 どなたか教えていただける方がいましたらよろしくお願いします。

専門家に質問してみよう