みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

解決済みの質問

phpでmysqlを検索、計算

PHPでmysql内のデータを、条件で絞込み、
一致するものの平均と個数を画面で表示したいのですが、
エラーが表示され、検索結果を表示することができません
現在書いているコードは以下になります

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
<html>
<head>
<title>検索結果</title>
</head>
<body>

<?php
~~省略~~

$Name = $_POST['namae'];
$Day = $_POST['hiduke'];
$conn =
mysql_connect($url,$user,$pass);
$sdb =
mysql_select_db($db,$conn);

$sql1 =
select avg(score) from seiseki where name = "$Name" and day like "$Day*";
$sql2 =
select count(score) from seiseki where name = "$Name" and day like "$Day*";
$sql3 =
select count(score) from seiseki where name = "$Name" and day like "$Day*" and score = 1;

$res1 = mysql_query($sql1);
$res2 = mysql_query($sql2);
$res3 = mysql_query($sql3);

 print "<table border=1 cellpadding=0 cellspacing=0>\n";
 print "<tr>\n";
 print "<td>合計</td>";
 print "<td align=right>{$sql2}回</td>;"
 print "</tr>\n";
 
 print "<tr>";
print "<td>1</td>";
 print "<td align=right>{$sql3}回</td>;"
 print "</tr>\n";
 
 print "<tr>\n";
 print "<td>平均</td>";
 print "<td align=right>{$sql1}</td>";
 print "</tr>\n";
 print "</table>\n";

mysql_free_result($res,&res2,&res3);

mysql_close($conn);
?>

</body>
</html>

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

seisekiテーブルにはnameとdayとscoreがあり、
nameはyamadatarouのようにローマ字で
dayは20110110のように数字で
scoreには1~4の数字が入っています

nameは完全一致、dayは前方一致で
sql1では数字の平均、sql2では合計回数、sql3では1の回数をカウントしています

30行目「$sql1 =
select avg(score) ~ ~ ~」のあたりに記述エラーがあると表示されるので、
おそらく検索方法の文法が間違っているのですが、
色々調べてみても記述の仕方がこの方法以外見つかりません

何か記述方法の間違いや別の記述方法がありましたら、ご教授お願いいたします

また、現在エラーは表示されていませんが、
print近辺も見ようみ真似での記述ですので、間違いなどがありましたら
ご教授いただけないでしょうか

投稿日時 - 2011-01-10 02:16:28

QNo.6437203

すぐに回答ほしいです

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

>30行目「$sql1 =
>select avg(score) ~ ~ ~」のあたりに記述エラーがあると表示されるので、
>おそらく検索方法の文法が間違っているのですが、

SQLの記述ではなく、単純にPHPの記述エラーです。

$sql1 には、「ダブルクォートで括ったリテラルの文字列」か「文字列が格納された変数」以外の物を代入する事はできません。

$sql1 = select avg(score)...

はリテラルでも無いし、変数でも無いのでエラーになります。

正しくはこんな感じになると思います。


$sql1 = "select avg(score) from seiseki where name = '$Name' and day like '$Day*'";

投稿日時 - 2011-01-10 03:25:55

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

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

回答(3)

ANo.3

>問題点は解決したのですが、やはり
> print "<table border=1 cellpadding=0 cellspacing=0>\n";
>以降が間違っているらしく、そこで再びエラーが出てきてしまいます

試す環境がないので確認できませんが、とりあえずすぐにわかるのは

> print "<td align=right>{$sql2}回</td>;"

ここは、$res1、$res2、$res3 をセットでしょう。
$sql1、$sql2、$sql3 はSQL文が入っているだけです。

投稿日時 - 2011-01-10 16:05:11

補足

単純な全角、半角スペースの入力ミスだったようです
ご迷惑をおかけして、もうしわけありません

ただ、それでも結果が「合計 Resource id #4回」
のような表示になってしまい、正しい結果が表示されません

データベースを見る限り、正しい結果表示は
「合計 1回」のはずなのですが・・・・

投稿日時 - 2011-01-10 16:30:29

お礼

すみません、そこは質問時の記述ミスで、実際は$sql1といったようになっておりました

投稿日時 - 2011-01-10 16:08:26

ANo.2

#1 です。追記。

$sql2、$sql3 も同様ですよ。

投稿日時 - 2011-01-10 03:28:17

お礼

ご指摘の通り、”が抜けており、また’と表記すべきところが”となっておりました
ありがとうございます

問題点は解決したのですが、やはり
 print "<table border=1 cellpadding=0 cellspacing=0>\n";
以降が間違っているらしく、そこで再びエラーが出てきてしまいます
何かお気付きになられた点などはないでしょうか?

投稿日時 - 2011-01-10 15:31:16

あなたにオススメの質問