ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 12 years ago

Closed 12 years ago

Last modified 12 years ago

#957 closed defect (fixed)

admin:世代別メンバー表示で、誕生日を迎えたユーザの世代が更新されない

Reported by: kiwa Owned by: maruyama
Priority: minor Milestone: OpenPNE2.6.10
Component: owner【オーナー向け機能】 Version: 2.6.x & 2.8.x & 2.10.x
Keywords: OpenPNE2.8.3, OpenPNE2.9.3 Cc:

Description

http://openpne.jp/?m=pc&a=page_fh_diary&target_c_diary_id=11441 こちらより報告いただきました。

管理画面
統計情報→世代別メンバー表示

現象
今年誕生日を過ぎて10歳になった人が0~9歳でカウントされる。

SQLでは月日の計算もしているみたいです。

Change History (11)

comment:1 Changed 12 years ago by kiwa

http://openpne.jp/?m=pc&a=page_fh_diary&target_c_diary_id=11460
こちらの記事で検証されています。

症状ー>誕生日が過ぎても年齢がアップされない。

原因ー>SQL文の間違い

修正ー>SELECT (year( curdate( ) ) - birth_year) - ( if( RIGHT( CURDATE( ) , 5 ) > ( birth_month + '-' + birth_day ) , 0, 1 ) ) AS age FROM c_member

概要ー>年で何歳かを計算し、そこから誕生日が来てるかどうかをみて1を引くかひかないか。
誕生日が今日より大きければひかない。小さければ(誕生日をすぎた)場合は1を引く。

comment:2 Changed 12 years ago by kiwa

Keywords: 再現済み added; 再現待ち removed

http://trac.openpne.jp/changeset/3393
修正のチェンジセットです

comment:3 Changed 12 years ago by ogawa

Keywords: OpenPNE2.8.2 added; 再現済み removed
Milestone: OpenPNE2.6.9
Owner: changed from nobody to ogawa
Status: newassigned

修正取り込みます。

comment:4 Changed 12 years ago by ogawa

Keywords: OpenPNE2.8.2 removed
Milestone: OpenPNE2.6.9
Owner: changed from ogawa to kiwa
Status: assignednew

つじくにさんの修正を確認しましたが、正常に動作しませんでした。このバグの修正は2.8.2では見送ります。

確認バージョン

  • MySQL 4.1.20
  • MySQL 5.0.32
mysql> SELECT RIGHT(CURDATE() , 5);
+----------------------+
| RIGHT(CURDATE() , 5) |
+----------------------+
| 07-20                |
+----------------------+

mysql> SELECT (5 + '-' + 1);
+---------------+
| (5 + '-' + 1) |
+---------------+
|             6 |
+---------------+

mysql> SELECT (5 + '-' + 30);
+----------------+
| (5 + '-' + 30) |
+----------------+
|             35 |
+----------------+

mysql> SELECT (if (RIGHT(CURDATE() , 5 ) > (5 + '-' + 1), 0, 1));
+----------------------------------------------------+
| (if (RIGHT(CURDATE() , 5 ) > (5 + '-' + 1), 0, 1)) |
+----------------------------------------------------+
|                                                  0 |
+----------------------------------------------------+

mysql> SELECT (if (RIGHT(CURDATE() , 5 ) > (5 + '-' + 30), 0, 1));
+-----------------------------------------------------+
| (if (RIGHT(CURDATE() , 5 ) > (5 + '-' + 30), 0, 1)) |
+-----------------------------------------------------+
|                                                   1 |
+-----------------------------------------------------+

comment:5 Changed 12 years ago by maruyama

修正します

comment:6 Changed 12 years ago by maruyama

Owner: changed from kiwa to maruyama

comment:7 Changed 12 years ago by maruyama

修正しました。

2.6 r3528

2.8 r3527

2.9 r3526

日付の比較を四桁の数値に変換(7/14->714,12/22->1222)してから比較することによって、比較演算子が有効に働くように変更しています。

comment:8 Changed 12 years ago by ogawa

Keywords: OpenPNE2.8.3 OpenPNE2.9.3 added
Milestone: OpenPNE2.6.10
Resolution: fixed
Status: newclosed
Version: 2.6.x & 2.8.x2.6.x & 2.8.x & 2.9.x

若干、修正加えました。

comment:9 Changed 12 years ago by kunitsuji

お手数かけました。

$sql = "SELECT (year(CURDATE()) - birth_year) - (if( MID(CURDATE(),6,2)+MID(CURDATE(),9,2) >= (birth_month + birth_day ) , 0, 1 ) ) AS age FROM c_member";

comment:10 Changed 12 years ago by kunitsuji

↑もだめw

comment:11 Changed 12 years ago by kunitsuji

SELECT (YEAR(CURDATE())-birth_year)-(RIGHT(CURDATE(),5)<CONCAT( RIGHT(CONCAT("0",birth_month),2),"-",RIGHT(CONCAT("0",birth_day),2))) AS age FROM c_member;

Note: See TracTickets for help on using tickets.