• ベストアンサー

php の処理をした結果をカウントアップさせたい

php と mysqlで作ろうと考えてます。 ・内容 php の処理をした結果 同じ名前があった場合 その名前をカウントアップさせたいです。 DBのテーブル name|counter 田中|1 佐藤|2 鈴木|5 phpの処理をした結果 「田中」 が重複していたい場合のDBの結果内容 name|counter 田中|2 佐藤|2 鈴木|5 参考サイトがございましたらアドバイスいただければ幸いです。 よろしくお願い致します。

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

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

SQL文 一行で済みますよ。 $query = "update [テーブル名] set counter=counter+1 where name='田中'"; 多分、こんな感じ。

anan19
質問者

お礼

これだけで済むとは。。。試したら意図した結果になりました。 アドバイスありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

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

まず、nameにユニーク属性をつけておきます(プライマリでも可) なお、counterのデフォルト値は1にしておきます create table users(name varchar(20) not null unique key,counter int default 1); insert into users values('田中',1),('佐藤',2),('鈴木',5); 以下、すでにデータがあればcounterがインクリメントされ、なければ追加されます INSERT INTO users(name) VALUES ('田中') ON DUPLICATE KEY UPDATE counter=counter+1; INSERT INTO users(name) VALUES ('吉田') ON DUPLICATE KEY UPDATE counter=counter+1;

参考URL:
http://dev.mysql.com/doc/refman/5.1/ja/insert-on-duplicate.html
anan19
質問者

お礼

アドバイスありがとうございます。 こういうやり方もあるんですね。 参考になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 昨日を基点に30日間の対象レコードを表示したい

    php と mysqlで作ろうと考えてます。 ・内容 昨日を基点に30日間の対象レコードを表示したいです。 その際、降順表示を考えてます。 DBのテーブル date |name|counter 2013-04-20 |田中|2 2013-04-30 |佐藤|4 2013-05-10 |鈴木|8 2013-05-15 |近藤|11 2013-05-22 |藤木|10 2013-05-23 |藤原|10 やりたいことの結果イメージ(phpの処理をした結果) 実装日 2013-05-23 の場合 1位:近藤 2位:藤木 3位:鈴木 4位:佐藤 *補足 昨日から30日間のため 「田中」と「藤原」 は順位から対象外となります。 参考サイトがございましたらアドバイスいただければ幸いです。 よろしくお願い致します。

    • 締切済み
    • PHP
  • PHPで同じDBから違う内容でカウントを繰り返す

    各クラスに、田中・鈴木・佐藤が何人いるかMySQLのデータベースからカウントし HTMLでテーブルを組んで、それぞれの人数を表示しています。 【カウント用PHP】 $cnt_A = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%田中%' AND class LIKE '%1組%'"; $cnt_recordSet_A = mysql_query($cnt_A); $table_A = mysql_fetch_assoc($cnt_recordSet_A); $A = number_format($table_A['cnt_A']); $cnt_B = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%鈴木%' AND class LIKE '%1組%'"; $cnt_recordSet_B = mysql_query($cnt_B); $table_B = mysql_fetch_Bssoc($cnt_recordSet_B); $B = number_format($table_B['cnt_B']); $cnt_C = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%佐藤%' AND class LIKE '%1組%'"; $cnt_recordSet_C = mysql_query($cnt_C); $table_C = mysql_fetch_Cssoc($cnt_recordSet_C); $C = number_format($table_C['cnt_C']); $cnt_D = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%田中%' AND class LIKE '%2組%'"; $cnt_recordSet_D = mysql_query($cnt_D); $table_D = mysql_fetch_Dssoc($cnt_recordSet_D); $D = number_format($table_D['cnt_D']); $cnt_E = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%鈴木%' AND class LIKE '%2組%'"; $cnt_recordSet_E = mysql_query($cnt_E); $table_E = mysql_fetch_Essoc($cnt_recordSet_E); $E = number_format($table_E['cnt_E']); $cnt_F = "SELECT COUNT(*) AS cnt FROM table WHERE name LIKE '%佐藤%' AND class LIKE '%2組%'"; $cnt_recordSet_F = mysql_query($cnt_F); $table_F = mysql_fetch_Fssoc($cnt_recordSet_F); $F = number_format($table_F['cnt_F']); 【表示用PHP】 +------+-----------------+-------------------+ |----|1組          |2組           | +------+-----------------+-------------------+ |田中|<?PHP print $A ?>人|<?PHP print $D ?>人| +------+-----------------+-------------------+ |鈴木|<?PHP print $B ?>人|<?PHP print $E ?>人| +------+-----------------+-------------------+ |佐藤|<?PHP print $C ?>人|<?PHP print $F ?>人| +------+-----------------+-------------------+         (テーブルはHTMLで作成、コードは略します・・・) 今後、各テーブルにさらに  ・男子の人数/女子の人数 表示例: +------+---------------------------------------------------------------------+...... |田中|<?PHP print $A ?>人(男子:<?PHP print $A_boy ?>/女子:<?PHP print $A_girl ?>)|...... +------+---------------------------------------------------------------------+...... というように増やしていこう思ったのですが、 【カウント用PHP】がすごく長くなってしまって、スマートじゃないのではないかと疑問に思っています。 簡潔なやり方などご存じの方いましたらご教授お願い致します。

    • ベストアンサー
    • PHP
  • php、mysqlを使用した得点ランキング

    現在得点ランキングを作成しています。 mysqlの中に入っているデータを取り出して表示させたいのですが、 なかなかうまくいかず困っています。 mysql内 |id|name| |1|山田| |2|佐藤| |3|山田| |4|鈴木| |5|佐藤| |6|山田| |7|鈴木| |8|田中| としております。 表示方法は 順位| 名前 | 得点数 1位 | 山田 | 3 2位 | 佐藤 | 2 2位 | 鈴木 | 2 4位 | 田中 | 1 としたいです。 mysql内に入っている名前の数で得点数を出してなおかつソートで降順にしたいです。 お分かりの方がいらっしゃいましたらご教示お願いします。

    • ベストアンサー
    • PHP
  • PHP+MySQLでの排他処理とDBクローズ

    <環境> Apache1.3.37 PHP4.4.6 MySQL4.0.27 PHPで、掲示板などのスクリプト作成を勉強しています。 これまで、ログをログファイルとして保存するように作成しておりましたが、データベースに保存するように変更している途中です。 そこで、教えていただきたいのは下記の2点です。 ・ロック処理の必要性 →ログファイルを作成するタイプの場合、同時アクセスによるファイル破損を防ぐため、ロック処理が必要でした。DBに変更した場合も同様に必要なのでしょうか? ・DBのクローズ処理 →最小限のソースを以下に記します。9行目のクローズ処理は必ず必要でしょうか?また、エラーが発生した場合、7行目で処理が終わるのですが、この直前にもクローズ処理を記入する必要があるのでしょうか? 1)<?php 2)$db = mysql_connect(host,user,pass); 3)mysql_select_db(db-name,$db); 4)$query = "INSERT INTO table(id,name) VALUES('1','なまえ')"; 5)if (!(mysql_query($query))) { 6) print = "書き込みに失敗しました。"; 7) exit(); 8)} 9)mysql_close($db); 10)?> 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHP+MySQLの繰り返し処理で…

    PHPとMYSQLを使ってWEBページを作っています。 わからないところがあるので、どなたか教えていただけないでしょうか?php5+mysql4.0.1です。 検索フォームから送られてきた条件をもとに、1ページに10件の検索結果を表示しています。表示するのはテーブル1の名前で、ここまではうまくいっています。 例:------------------------------------------ 検索結果 神奈川県 林さん 東京都 遠藤さん 北海道 近藤さん 例:------------------------------------------ このあと、上記クエリの結果が続く限りテーブル2 から名前に該当する趣味を表示したいと思います。 例:------------------------------------------ 検索結果 神奈川県 林さん テニス 東京都 遠藤さん サッカー 北海道 近藤さん 絵画 例:------------------------------------------ この処理を加えると、一ページに10件表示されていたものが最初の一件だけしか表示されなくなってしまいます。whileの中に新たにクエリを書いているからでしょうか…? 以下に問題部分だけ見やすくまとめなおしたソースを書きました。 (1)$sql = "SELECT name,ken FROM tablename where ken=$ken"; $mysql->query($sql); while($row = $mysql->fetch()){ $name = $row[name]; (2)$sql2 = "SELECT syumi FROM tablename2 WHERE name='$name'"; $mysql->query($sql2); while($row2 = $mysql->fetch()){ $syumi = $row2[syumi]; } echo "$ken"."$name"."$syumi"; } わかりづらい説明ですみません。 テーブル1に趣味のフィールドを作ることはできない前提で、このままのDB構造でうまく上記を解決することはできますか? ご指導よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPで同じページに似た内容のデータベースを表示

    PHPで同じページに同じデータベース(table)から別の条件でリストを表示させています。 もっと簡単でスマートな方法はないか、ご質問させていただきます。 【表示例】 <鈴木さん> 鈴木たろう 090-0000-0000 鈴木まさゆき 080-0000-0000 鈴木あきこ 03-0000-0000 <佐藤さん> 佐藤まさる 090-0000-0000 佐藤ともみ 080-0000-0000 佐藤けいこ 03-0000-0000 【PHP】 <?PHP $sql = "SELECT name, tel FROM table"; $sql .= " WHERE name LIKE '%鈴木%'"; $recordSet = mysql_query($sql); $rows = mysql_num_rows($recordSet); if($rows){ while($row = mysql_fetch_array($recordSet)) { $table .= "".$row['name'].""; $table .= " ".$row['tel']."<br>"; $table .= "\n"; } } echo "<鈴木さん><br>"; echo $table; mysql_free_result($recordSet); ?> <?PHP $sato_sql = "SELECT name, tel FROM table"; $sato_sql .= " WHERE name LIKE '%佐藤%'"; $sato_recordSet = mysql_query($sato_sql); $sato_rows = mysql_num_rows($sato_recordSet); if($sato_rows){ while($sato_row = mysql_fetch_array($sato_recordSet)) { $sato_table .= "".$sato_row['name'].""; $sato_table .= " ".$sato_row['tel']."<br>"; $sato_table .= "\n"; } } echo "<佐藤さん><br>"; echo $sato_table; mysql_free_result($sato_recordSet); ?> 上記のように、同じデータベース(table)から、 「鈴木さん」「佐藤さん」それぞれ条件を設定して表示していますが、 もっと簡単に短いコードで表示させることは可能でしょうか。 また、可能であれば、それを何と呼べば(検索すれば)宜しいのでしょうか。 お願い致します。

    • ベストアンサー
    • PHP
  • PHP DBからのデータ一覧

    いつもお世話になっております。 わからないことがあり、ご質問させていただきます。 PHPは初心者です。 下記の内容は会員フォームを通り、メンバー一覧ページのコードです。 member.phpとしています。 DBの中は 1番の人 first_name = 山田 last_name = 太郎 2番の人 first_name = 佐藤 last_name = 一郎 3番の人 first_name = 田中 last_name = 大輔 とします。 -------------------------------------------------- $query = sprintf("SELECT * FROM member WHERE id='%s' ",$uid); $result = mysql_query($query, $link); if ($result) { $row = mysql_fetch_array($result); if ($row) { $name = $row['first_name']."&nbsp;".$row['last_name'];//$nameは***さんこんにちはとして使用しています。 } } ・ ・ ・ <html> <body> <ul> <li></li> <li></li> <li></li> <li></li> </ul> </body> </html と記述しており、<li></li>にはfloat:left;を使っております。 ここで 佐藤 一郎 田中 大輔 山田 太郎 ソースの表示は <li><a href="#">佐藤 一郎</a></li> <li><a href="#">田中 大輔</a></li> <li><a href="#">山田 太郎</a></li> と順番にデータベースの中からfirst_nameとlast_nameだけをとりだして表示したいのですが、いくら調べてもできません。 (田中さんでログインした場合は田中さんのリストは表示されなくてもよい)

    • ベストアンサー
    • PHP
  • PHP+MySQL データが無い時のみ追加したい

    PHP+MySQLで簡単なページカウンタを作っていますが、どうも正常に動いてくれません。 カウントを取りたいページに <IMG src="count.php?pagename=サンプルページ"> としてページネームを渡してあります。 count.phpの主要部分は //ページネームを取得(例:サンプルページ) $pagename = $_GET["pagename"]; とし、データベースに接続したあと // データ取り出し $sql = "SELECT name, count FROM shukei ORDER BY count;"; $rst = mysql_query($sql, $con); //データをループで読み込み while ($col = mysql_fetch_array($rst)) { $name = $col[name]; //渡されたページ名がDB内にあればカウント1増 if($name == $pagename){ $sql = "update shukei set count = count + 1 where name = '$name'"; } //渡されたページ名がDB内に無ければ新規追加 elseif($name != $pagename){ $sql = "INSERT INTO shukei(name,count) values(\"$pagename\",1)"; } } mysql_query($sql, $con); //接続解除 mysql_free_result($rst); $con = mysql_close($conn); としています、どんどん新規で追加されていってしまいます。 DB内にページ名が存在するならカウントアップをし、無い時はカウント1として新規追加をさせたいのですが…。 テーブル名はshukeiで id,name,count としております。 何か根本が間違っているのでしょうか。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpでMySQL内の重複文字カウント

    phpでMySQL内に格納されている文字データのうち、重複した文字データを 重複数順にランキング表示するプログラムを作成しようと思います。 例 MySQLデータが 昼 夜 昼 昼 夜 朝 であれば、 1、昼 2、夜 3、朝 とphpで表示 MySQLへのデータ登録は、普通にmysql_queryでSQL文を飛ばしてデータ挿入しています。 その際、MySQL内のデータと重複したらイベント(重複カウントを1増やすなど)を起こす方法、 もしくは、重複しているデータと、その重複数を取得できるようなphp関数、SQL文はないものでしょうか? データ数自体は100程度のものなので、全データをphpで配列に格納してから、 配列内を捜査でもよいのですが・・・ 初歩的かつ限定的な質問ですが、どうかご回答お願いします。

    • ベストアンサー
    • PHP
  • 検索結果IDの使いまわしについて

    いつもお世話になります。 MySQL+PHPでシステムを構築しております。 PHPのmysql_queryもしくはmysql_db_queryで得た結果IDを使いまわす方法はありませんか? というのも、MySQLへ同じ検索をかける必要がある場合、都度検索するより、一度検索した結果IDを使えれば楽なのですが。。。 実際にやりたい事は、PHPのwhile関数で結果ID分の繰り返し処理を行い、その後、同じ繰り返し処理を行いたいのですが、再度、検索クエリ文をmysql_queryもしくはmysql_db_queryを行わずに利用できる方法があればと考えております。宜しくお願い致します。

    • ベストアンサー
    • MySQL