ミュートス・ラボ Mythos-labo
なでしこのススメ
- 2009年2 月26日(木)
- 未分類
shimazakiです。
先日社内で勉強会を勉強会を行ったのですが、DOM入門ともう一つ、「なでしこのススメ」というタイトルで発表を行い、「日本語プログラミング言語・なでしこ」の社内普及に乗り出してみました。
日常の単純作業やめんどくさい単調作業など、せっかくだから、プログラム作っちゃいませんか、なでしこで。
Unionを使わない複数集計
- 2009年2 月24日(火)
- 未分類
shimazakiです。
今日はSQLの話です。
SQLってプログラムと違い、上から順に処理されるわけではなく、まとめて処理されるのでなかなか理解できません。
SQLってこんなことも出来たのか!と感動した時の話をしたいと思います。
例えばこんなテーブルがあったとして(試験の結果テーブルだと思っていただければ)
- sampleTbl
- 100点の人数と、90〜99点の人数と、80〜89点の人数と70〜79点一覧を抽出したい場合
| ID | point |
|---|---|
| A | 100 |
| B | 90 |
| C | 88 |
| D | 70 |
| E | 95 |
| F | 80 |
select ‘p100′ as pnt,count(*) as cntpoint from sampleTbl where point = 100
union
select ‘p90′ as pnt,count(*) as cntpoint from sampleTbl where point between 90 and 99
union
select ‘p80′ as pnt,count(*) as cntpoint from sampleTbl where point between 80 and 89
union
select ‘p70′ as pnt,count(*) as cntpoint from sampleTbl where point between 70 and 79;
pnt cntpoint p100 1 p90 3 p80 1 p70 1
というSQLを、
select
sum( if( point=100, 1,0)) as p100,
sum( if( point between 90 and 99 , 1,0 ) ) as p90,
sum( if( point between 80 and 89 , 1,0 ) ) as p80,
sum( if( point between 70 and 79 , 1,0 ) ) as p70
from sampleTbl;
p100 p90 p80 p70 1 3 1 0
と言うSQLに変更します。
条件に一致する行を1とし、その個数をカウントすることで、結果を一行で取得することができます。
これが、単一の試験結果であればそれほど利点はないのですが、例えば、今回のテスト結果と前回のテスト結果を表示する画面、というものがあった場合、先述のunion方式では結果データの構成が複雑になってしまいますが、後述の方法であれば、今回の結果行と前回の結果行という取得が可能なので、結果データの構成が分かりやすくなります。
SQLの理解がまだまだ足りないと思う今日この頃でした。
JavaScriptを理解するための5つの条件+α
- 2009年1 月13日(火)
- JavaScripts/Ajax
shimazakiです。こんにちは!
最近ようやくJavaScriptが理解できてきました。
そこで、自分がなんちゃってからそこそこになるまでに理解した5つ+αのことを紹介したいと思います。
1.変数と関数が同じものであると理解する
- JavaScriptは関数も変数に格納されています。
hoge("hogehoge");
2.連想配列とオブジェクトが同じものであると理解する
- JavaScriptは連想配列とオブジェクトは同じものです
alert( location["href"] );
3.関数がクラス(オブジェクト)になるということを理解する
- JavaScriptは関数に対してnewをつけるとその関数のインスタンスになります。
foo = new hoge();
4.リテラルを理解する
- 配列リテラル[]
- 関数リテラル function()
- オブジェクトリテラル{}
- JavaScriptはnewしなくとも配列やオブジェクトが生成できます。
//処理
};
aaa:"xxx"//文字列
,bbb:["y","yy","yyy"]//オブジェクトの要素として配列を定義(配列もリテラル)
,ccc:function(){}//オブジェクトの要素として関数を定義(関数もリテラル)
};
5.prototypeという概念(JavaScript的オブジェクト指向)を理解する
- JavaScriptにはextendがありませんが、prototypeを使用することで値の引継ぎができるようになります。
hoge.prototype.foo = "bar";
var obj = new hoge();
alert( obj.foo );// bar
+α.DOMを理解する
- DOMを理解するとHTML(XML)コンテンツを自由自在に操作・表現することが出来るようになります。
DOMを理解するためのいくつかの条件はまたいずれ、自分が理解できた時に紹介させていただこうと思います。
Let's JavaScript!
JavaScript勉強中#1
- 2008年12 月24日(水)
- JavaScripts/Ajax
今日のトリビア
JavaScriptの正規表現は・・・
「(?<=」後読み(戻り読み)や「(?<!」否定後読み(否定戻り読み)が使用できない。
1時間悩んだ自分への戒めを込めて。shimazakiでした。
これだけだとさすがに中身がないので、もう少し。
そもそも後読みを使いたかった(正確には本当に使いたかったのは否定後読みですが)理由として、pathinfo形式の現在のURLをスラッシュ区切りで変数に格納したい、という目的のためです。
例えば、
http://example.com/index.php/moduleName/ControllerName/ActionName
であった場合に
var urls = location.href.split( pattern );
//urls[0] : http://example.com
//urls[1] : index.php
//urls[2] : moduleName
//urls[3] : ControllerName
//urls[4] : ActionName
というような具合に。
ですが、先述の通り、否定後読みは使用できないので、
//urls[0] : http:
//urls[1] :
//urls[2] : example.com
//urls[3] : index.php
//urls[4] : moduleName
//urls[5] : ControllerName
//urls[6] : ActionName
とすることで対応することにしました。
補足になりますが、
実際にはgetパラメータも切り分けるために、
としました。
今日のエントリがまだ見ぬ未来のJavaScripter入門者の助けになれば幸いです。
PHPの配列結合の違いについてのまとめ
- 2008年10 月6日(月)
- PHP
shimazakiです。
PHPで配列同士を結合する方法をまとめてみました。
array_merge
array array_merge ( array $array1 [, array $array2, ... ] )
特徴:
array1のキーが文字の場合、array2に同じキーがあれば、array2の値によって上書きされる。
$arr1 = array('k1'=>'v1', 'k2'=>'v2');
$arr2 = array('k1'=>'vv1');
$arr = array_merge($arr1, $arr2);
var_dump($arr);
?>
arr1のk1がarr2のk1によって上書きされている。異なるキーはそのまま後ろに追加される
ただし、キーが数字の場合は上書きせず、追加する。
$arr1 = array(10=>'v1', 1=>'v2');
$arr2 = array(10=>'vv1');
$arr = array_merge($arr1, $arr2);
var_dump($arr);
?>
キーが数字の場合は同じキーであっても上書きされず、追加となる。
また、数字のキーは完全に振りなおされる。
数字と文字が混ざった配列の場合でも、数字は振りなおされ、結合される。
array_merge_recursive
array array_merge_recursive ( array array1 [, array ...] )
特徴:
array1のキーが文字の場合、array2に同じキーがあれば、元の要素を配列に変換しarray2の値を追加する
$arr1 = array('k1'=>'v1', 'k2'=>'v2');
$arr2 = array('k1'=>'vv1');
$arr = array_merge_recursive($arr1, $arr2);
var_dump($arr);
?>
元々のk1の要素が配列になり、arr2のk1の要素が追加される。
その際の添え字は数字となる。
ただし、キーが数字の場合はarray_mergeと同じ動作となる。
$arr1 = array(10=>'v1', 1=>'v2');
$arr2 = array(10=>'vv1');
$arr = array_merge_recursive($arr1, $arr2);
var_dump($arr);
?>
array_mergeと同じ結果。
加算演算子
特徴:
左側に右側を追加する。ただし、同じキーの場合、追加しない
同じキーがある場合、array_mergeとは違い、上書きをせず、また、追加もしない。
また、数字であっても上書きもせず、追加もされず、キーも振りなおされない。
以上です。
配列を加算演算子で扱えるというのが何ともPHPらしいですが、その動きはあんまり加算っぽくないように思います。