ここから質問投稿すると、最大4000ポイント当たる!!!! >>

どなたかお手すきでしたら、稚拙な質問にお付き合いお願い致します。
PHP4.3.8、MySQL4.0.16を使用しております。


アンケートフォームなどで、次のページに遷移するときにDBの年齢の値を
参照して制限をかけるというものを作成しているのですが、なかなかうまくいきません。

それぞれ男性の10代・20代・30代・40代・50代以上、女性についても前記同様で、
それぞれ100人を越えると制限がかかりアンケート終了となるようにしたいのです。

現在の状況ですと、17歳と入力したならば17歳が100カウントされると
制限がかかるようになってしまっており、「10代以下」という括りでの
制限がどうしてもかけられません。
どのように処理をしたらうまくいくのでしょうか?
よろしくお願いいたします。

htmlでは下記のコードをincludeして、$limit_overが「1」ならば終了ページに遷移するようにしています。


/**********************/ PHP /**********************/

<?php
//----- DB接続 -----//
include("./inc_php/db_connect.php");

//アクセスデータリミッター集計

//SQL文を作成
$sql = "";
$sql = "SELECT f1, f2, end_flag, count(log_id) AS log_id_cnt
FROM table_test
GROUP BY f1, f2, end_flag
HAVING (((f1) = ".$f1.") AND ((f2) = ".$f2.") AND ((end_flag) = 1))";

//SQL文を実行する
$rs = @mysql_db_query($db,$sql);

//行を取得する
$row = @mysql_fetch_array($rs);

$log_id_cnt = 0;
if($row["log_id_cnt"] == NULL){
$log_id_cnt = 0;
}else{
$log_id_cnt = (int)$row["log_id_cnt"];
}


//リミッター人数オーバーチェック
if ( $f1 == 1 && $f2 <= 19 && $log_id_cnt >= 100 ||//男性・10代
$f1 == 1 && $f2 >= 20 && $f2 <= 29 && $log_id_cnt >= 100 ||//男性・20代
$f1 == 1 && $f2 >= 30 && $f2 <= 39 && $log_id_cnt >= 100 ||//男性・30代
$f1 == 1 && $f2 >= 40 && $f2 <= 49 && $log_id_cnt >= 100 ||//男性・40代
$f1 == 1 && $f2 >= 50 && $log_id_cnt >= 100 ||//男性・50代以上
$f1 == 2 && $f2 <= 19 && $log_id_cnt >= 100 ||//女性・10代
$f1 == 2 && $f2 >= 20 && $f2 <= 29 && $log_id_cnt >= 100 ||//女性・20代
$f1 == 2 && $f2 >= 30 && $f2 <= 39 && $log_id_cnt >= 100 ||//女性・30代
$f1 == 2 && $f2 >= 40 && $f2 <= 49 && $log_id_cnt >= 100 ||//女性・40代
$f1 == 2 && $f2 >= 50 && $log_id_cnt >= 100 ){//女性・50代以上

//リミッター人数オーバー画面出力
//データ追加

//---- 日付け取得 ----
$day_date_01 = "";
$day_date_01 = date("Y/n/j G:i:s");

$lim_over = 1;

/* ----- データを更新 ----- */
$sql_w = "";
$sql_w = "UPDATE table_test SET f1 = '".$f1."',f2 = '".$f2."',day_date_01 = '".$day_date_01."',end_flag = 1,lim_over = '".$lim_over."'WHERE (k)='".$k."'";

//SQL文を実行する
$rs_w = "";
$rs_w = mysql_db_query($db,$sql_w);

}

//DBへの接続を切断
@mysql_close($dbHandle);

}

?>

このQ&Aに関連する最新のQ&A

A 回答 (1件)

SQLの部分で10代、20代・・・となるようにすればいいのではないでしょうか?



1.((f2) = ".$f2.")をbetweenにする

$f2が17なら

(f2 between 10 AND 17)
(f2 >= 10 AND f2 < 20)でも良い。

2.GROUP BY FLOOR(f2 / 10)とかにしちゃう。
10代、20代・・の区切りにするのであれば、こんな集計にしてしまっても良いかも。


ただ、実際にはWHEREを使っているので、

$sql = "SELECT count(*) FROM table_test WHERE f1 = '{$f1}' AND f2 between 10 AND 20;";

これだけで事足りるんじゃないかと思います。

if文は単純に$log_id_cnt >= 100だけになりますね。
    • good
    • 0
この回答へのお礼

書き込みありがとうございます!

四苦八苦してなんとか思ったとおりの処理が出来るようになりました。
SQL部分で年齢を括るという言葉がとてもヒントになりました!

お礼日時:2008/03/12 10:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング