こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

mysql php ループ列の行の値を比べたい

php、mysqlを見よう見まねでやっている
初心者です。

以下のような表をphpで作りました。
これでできた表の
d列の行の値(文字)を全て比べて
値がその他の行と一行でも違っていたら
(他の行と揃って同じでなかったら)
errorを出したいと思っています。
どのような式を書いたらd列の全ての行の
値(文字)を調べ、errorを出すことが
できるのでしょうか?

<tr>
<th>a</th>
<th>b</th>
<th>c</th>
<th>d</th>
</tr>

<? while ( $row = mysql_fetch_array( $result )){ ?>
<tr>
<td><?= $row['a'] ?></td>
<td><?= $row['b'] ?></td>
<td><?= $row['c'] ?></td>
<td><?= $row['d'] ?></td>
</tr>
<? ; } ?>

結果
a   b  c    d
aaa bbb ccc ddd
aaa bbb ccc ddd
aaa bbb ccc dde→(errorを出したい)

errorを出せれば下記のようなif文にしたいと思っています。

<? if($d==error){XXX;}
else{ooo;} ?>

上記式も見ようまねでよくわかっていなく、
質問が理解して頂けるかどうかですが、
どうかご教授の程よろしくお願い致します。

投稿日時 - 2013-03-13 10:50:07

QNo.7991011

すぐに回答ほしいです

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

ああ、なるほど、曲解して失礼しました。
であれば
select count(distinct d) as count from テーブル

というクエリを実行して、
dがそろっていない場合はcountが2以上になりますのでエラーとすればいいでしょう。

PHPフローの中で処理するならフラグ管理して
以下のように前回のデータを取っておいて比較してもよいかも

<?PHP
$error_flag=false;
$pre_d="";
while ( $row = mysql_fetch_array( $result )){
if($pre_d !=="" and $row["d"]!==$pre_d) $error_flag=true;
処理・・・
$pre_d=$row["d"];
}
if($error_flag) print "エラー";
?>

投稿日時 - 2013-03-13 14:19:27

お礼

再度回答頂きまして大変ありがとうございます。

>countが2以上になりますのでエラーとすればいいでしょう。
は先ほど頂いた回答で理屈的にはわかったのですが、
私の質問がまた悪く、
このwhile文はwhereで検索したループでしたので
出来そうもないな。。どうしようと思っていたところですが、
PHPフローの中で処理する式を書いて頂いて大変助かりました!
この通りに当てはめところ、見事に機能致しました。
素晴らしい回答を感謝致します。
とても助かります。
私にはとても考えられません。

また何かありましたら是非よろしくお願致します。
本当にありがとうございました。

投稿日時 - 2013-03-13 15:43:54

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>値がその他の行と一行でも違っていたら
>(他の行と揃って同じでなかったら)
>errorを出したいと思っています。

仕様がまずいですね

dddとddeがあった場合、なぜdddが正しくてddeが正しくないと言い切れるのでしょうか?
むしろdddが正しくないという判断があるのでは?

あえて方法を考えるなら
select d,count(*) from テーブル group by d
でdごとの件数をカウントしておき、dが最大値でないものは
エラーとして処理するようなクエリーを書くくらいでしょうか?
その場合でも最大値が一つだとは限らないので何とも言えませんが・・・

投稿日時 - 2013-03-13 12:12:05

補足

回答大変ありがとうございます。
>dddとddeがあった場合、なぜdddが正しくてddeが正しくないと言い切れるのでしょうか?

質問の仕方がわかりにくく申し訳ありません。
その通りでして、私はdddが正しいとは質問しているつもりはなく、d列の値が揃っていなかったらerrorを出せるような式が出来ないのかなと思って質問したつもりです。
>dごとの件数をカウントしておき、dが最大値でないものはエラー

とありますが、同じ値が多い少ないは関係なく、ただ単にdの行の値が全て揃っていなければエラーでokなのです。
また宜しけらば回答頂けると大変助かります。
どうか宜しくお願い致します。

投稿日時 - 2013-03-13 13:17:01