質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

3175閲覧

SQL文(ランダムに抽出した行のデータを更新したい)

pato

総合スコア32

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/09/13 03:06

例えば
table名 akb

id name team count
1 小嶋 A 0
2 島崎 A 0
3 高橋 A 0
4 横山 A 0
5 高城 K 0
6 松井 K 0
7 峯岸 K 0
8 武藤 K 0
9 柏木 B 0
10 渡辺 B 0
11 福岡 B 0
12 大島 B 0
上記テーブルから3行ランダムに選ぶのは

SELECT * FROM akb ORDER BY RAND() LIMIT 3;

でできると思うのですが、例えば更新ボタンを押して1回目のランダムな抽出でid=1,5,10が選ばれたとしてその時にid=1,5,10のcountを1増加させる、また更新ボタンを押して2回目のランダムな抽出でid=3,4,7が選ばれたらid=3,4,7のcountを1増加させる、以下繰り返し…のようなことをしたい場合どうしたらよいでしょうか?

データベースの接続はしているとして、

$sql="SELECT * FROM akb ORDER BY RAND() LIMIT 3";
$stmt=$pdo->query($sql);
while($row=$stmt->fetch()){
echo "<table>\n<tr>\n<td>".$row['id']."</td><td width='700'>".$row['name']."</td>\n</tr>\n</table>\n<br/>";
$sql="UPDATE akb SET count=count+1 WHERE id=$row[id]";
$stmt=$pdo->query($sql);
}

上記コードで試してみたのですが、なぜか1件表示されその1件分countが増加されるのですが、残りの2件は何も起こりません(表示されないしcountも増加されない)。どこが悪いでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ループの末尾で$stmtを上書きしてしまっているので、SELECTの結果が取れなくなっています。ここでは$stmtを受け取らずに捨てるか、別な名前の変数に受け取りましょう。

投稿2015/09/13 04:01

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ループ中に$stmtが書き変わってるからですかね?
変数名を変えてみては?

投稿2015/09/13 03:58

lightwill

総合スコア962

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問