mysqlのcountの挙動
mysqlのcountの挙動について教えてください!
tableの内容
id,temp_id,sex,create_date
1,aaa,1,2009-01-01 00:00:00
2,bbb,1,2009-01-02 00:00:00
3,bbb,1,2009-01-02 00:00:00
4,ccc,1,2009-01-03 00:00:00
5,ccc,1,2009-01-03 00:00:00
6,ccc,1,2009-01-03 00:00:00
実現したいことは単純で日付を参照し
2009-01-01であればsex=1は1件
2009-01-02であればsex=1は2件
2009-01-03であればsex=1は3件
と表示させたくforeach内で以下のソースで試したのですがうまく取得
できず任意の日付が2009-01-03であっても結果が1となってしまいます。
※$val2には任意のY-m-d形式の配列の値が入ります。
$res =& $mdb2->query("SELECT Count(sex) AS cnt FROM table
WHERE DATE_FORMAT(create_date, '%Y-%m-%d') = '" . mysql_real_escape_string($val2) . "'
&& sex = '" . mysql_real_escape_string(1) . "'
GROUP BY temp_id");
while ($row = $res->fetchRow()) {
$data[$key]['man'] = $row['cnt'];
}
お礼
PDOではなく、mysqliを利用したらうまく行きました。 もしかしたらコードの書き方に何かしら影響するところがあったのかもしれませんが、とりあえず期待する結果が得ることが出来ましたので、この質問は〆させていただきます。 気にかけていただき、ありがとうございました。
補足
遅くなってしまって申し訳ありません。 以下が、実際に動作させているPDOのソースです。 ------- function do_query ($query="", $stmt="") { $pdo = $this->conn; try { //クエリ実行 $stmt = $pdo->query($query); //取得データ件数 $this->rows = $stmt->rowCount(); unset($dats); if ($this->rows > 0) { //連想配列として結果の行を取得し、格納する while ($dat = $stmt->fetch(PDO::FETCH_ASSOC)) { $dats[] = $dat; } } $this->dat = $dats; $this->status = 1; } catch(PDOException $e){ $this->status = -2; $this->db_error = 1; $this->err_msg = $e; $this->orig_query = $query; $this->status = -1; $this->dat = NULL; $this->rows = NULL; } return $this->status; } このメソッドに質問で記載したSQL文等を引数として渡しています。 コネクション部分は以下の通りです。 function conn () { try { $conn = new PDO("mysql:host=".DBHOST."; dbname=".DBNAME, DBUSER, DBPASS); } catch(PDOException $e) { $msg = "DATABASE IS UNDER MAINTENANCE.(-119)"; print "$msg\n"; exit; } return $conn; } よろしくお願いいたします。