MySQLで日付毎の集計を計算する

 データベースを使って集計表見たいなものを作っていると、日付毎の合計数などが知りたい場合がある。
普通にレコードに記録した日付でグループ化して合計とれば良い、というのはわかるけど
日付の型をDATETIMEにしていると時、分、秒も要素として入ってしまうので同じ日付でも1秒違うと違う
グループになってしまう。まあ、当たり前だ。

では、これをシンプルにまとめるコードが無いかと思い調べたのでメモ。
例えば

id | ip | update_time
——————————————–
1 | 192.168.0.1 | 2012-06-29 11:11:11
——————————————–
2 | 192.168.0.2 | 2012-06-29 11:11:12
——————————————–
3 | 192.168.0.1 | 2012-06-29 11:11:13

見たいなテーブルがあったとしたら、
substringを使って日付部分の文字を切り出し、その結果をselect文に入れてグループ化する。
具体的には以下のような感じ。

select substring(update_time,1,10) as date,count(id) as cut
 from tbl group by date

 MySQLを使いました。



Objective-Cでクラス変数を定義

 Objective-Cにはクラス変数を定義する仕組みが無いようだ。
 同様の変数を使いたい場合は、static指定子を使って変数宣言するみたい。

@interface Greeting : NSObject
+(void)setMessage:(char *)message;
-(void)say;
@end

static char *msg ="good morning!!";


@implementation Greeting
+(void)setMessage:(char *)message{
	msg = message;
}
-(void)say{
	printf("%s\n", msg);	
}
@end


int main(void){
	id obj = [[Greeting alloc] init];
	[obj say];	// good morning!と表示
	
	// クラス変数を書き換え
	[Greeting setMessage:"hello!"];
	[obj say];	// hello!と表示
	
	return 0;
}

定義ファイルで利用できる局所変数を作るというノリらしい。
しかし、Objective-Cは難しい。なかなか覚えられない。



ファイルアップロードクラスで任意のフィールドのアップロード状態をチェックする

 CodeIgniterを使ったフレームワークで、複数のファイルアップロードフィールドを作った場合、アップロード実行メソッドを「$this->upload->do_upload()」としてしまうと全てのフィールドがチェック対象になってしまう。

 ファイル参照があったフィールドだけアップロードチェックを行いたい場合はどうしたら良いか。

 調べたらdo_uploadメソッドの引数にフィールド名を入れれば良いだけだった。

 とっても簡単。

$config["upload_path"] = "./image/";
$config["allowed_types"] ="gif|jpg|png";
$config["max_size"] ="100";
$config["max_width"] ="1024";
$config["max_height"] ="768";
		
$this->upload->initialize($config);
if(!$this->upload->do_upload("フォームの対象フィールド名"))
{
	// エラー処理
}
else
{
	// 成功!
}

アップロードフィールドが沢山ある場合はフィールド名を値とした配列を使ってforeachでブンブンまわし、オリジナルのチェック関数を通してチェック処理を行えば管理がスムーズになる。

フィールドに値がセットされているかどうかは、スーパーグローバル変数「$_FILES」を使って判断すればok。

$fields = array("file_up1", "file_up2", "file_up3");
foreach($fields as $field)
{
	// _upload_check_fncはフィールド名を引数に渡すと、
	// 上記のファイルアップロード処理を実行するオリジナル関数
	$this->_upload_check_fnc($field);
}

ところで、このCodeIgniterのファイルアップロードクラス、アップロードしたファイル名を任意に決めるような機能がなさそうなんだけど、やっぱ無いんだろうか。

仕方ないので同じファイル名があった場合は、連番をつける設定にしてファイルをアップロードし、サーバーにファイルをアップロード後、任意の名前にリネームした。なんかスマートでないけど好きなファイル名にする場合はこんな感じにするしかない?