それが当然といわんばかりに
銃夢から
銃夢から
「知らないとわからない」は「推測しにくい」って意味で。
1、DISSTINCT
GROUP BY *の代わりに
GROUP BYは暗黙のソートがあるので遅いので、重複削除だけならこっち推奨
2、ORDER BY RANDOM()
ランダムな順番でほしいとき
PostgreSQLは不可?SQLiteはいけた
3、ORDER BY ID=10 DESC, ID
10,1,2,3,4...って並ぶ
4、HAVING
GROUP BYを使わず、HAVING単独でも使える
fromここ
理解すれば便利だけど、使いどころは難しいかも
5、UNION ALL
UNIONは重複を削除するので暗黙のソートがある(遅い)
重複していいならALLが早い
6、ANY
INの演算子を指定できる版
7、REGEXP
文字列の正規表現一致。MySQL専用
ちなみにPostgreSQLでは「~」演算子
8、CASE WHEN THEN
条件分岐。非常に便利だけど、遅いし保守性悪い系
ちなみにこれはどこでも使えるので、
「SELECT CASE WHEN age > 10 THEN '10代' WHEN age > 20 THEN '20代' ...」
こんな感じのこともできるし、
「WHERE CASE WHEN age > 10 THEN true WHEN age > 20 THEN false」
見たいなことも。
(ORDER BYでも使えるんだ。。。)
9、BETWEEN AND
「n~nの間」って感じの比較ができる。日時系でも有効
指定された境界値が含まれる(<=, >=)ことに注意
10、EXISTS
INの早い版。ただし、他の列との比較ができない
SELECT 1してる感じ(ヒットすると即終了)
11、MATCH()
全文検索MySQL専用でMyISAM依存
ほかにORACLEにもあった気がする(SQL Serverだったか?)
PostgreSQLは基本的には持ってないけど、
ほかのソフトで全文検索できるようになるはず。
ほかにRDBで詰まりそうなところ。
特殊な取得順
簡単なorder byで取得できない条件での取得は難しい
(RDB自体順番の概念がないので)
行列変換
行を列に変換するのは基本無理と思ったほうがいい。
(最大列数固定ならできるけど)
ちなみに「ピボット変換」というらしい。
あんまり使われないですが、CREATE TEMPORARY TABLEも便利。
CASE WHEN THENと同じような「最後の手段」ではありますが。。。
http://oraclesqlpuzzle.hp.infoseek.co.jp/
SQLの複雑な条件集
Oracleに偏ってますが、この辺がSQLの限界なので
各項目のタイトルだけでもざっくり見とくといいかも。
とりあえず、気になったらこまめにEXPLAINかけると勉強になる。
(でも、MySQLのEXPLAINはちょっと読みにくい)
あと、MSDNは内容まとまってて質高い。
(IBMもかなりすごいが)
ただ、サイトの使い勝手は微妙だし、がんがんURI変わるのもいただけない。
http://www.ichirou.org/ver1/
そういえばFlashでクリック済みのリンクの色を変えるって
あまり見ないなと思った。
ただ、ここでも再読み込みするとクリアされる。残念。
SQLのSELECT部分で「COUNT (*)」って感じで「COUNT」と「(*)」の間にスペースあけるとエラーになる。
(by MySQL)
何でだろう?ASとかと誤認することになるからかな?
http://www.apple.com/jp/promo/backtoschool/sendahint/emailbuilder.html
結局「メールをプレビュー」の部分がそのまま画像で送られてくるだけでした。
ちょっとがっかり。
「おねだりメールを作成しよう」のUIはデザイン、動きはいいけど、
操作性はいまいち。
「1.送る相手を選ぼう」で選択後、「2.メッセージを選ぼう」を
選択しようとすると必ず「3.好きなイメージを選ぼう」が選択されてしまう。
アコーディオンUIとmouseoverは相性悪いと思う。
Error populating TableName object [wrapped: Unable to convert value at column nn to timestamp: nn]
$c->clearSelectColumns();
したあと、doSelect($c);してたのが原因。
(doSelectRS($c);が正しい)
電話を2コール以内に取るのも。
振り返ればほかに選択肢があったとしても、そのとき、その状況になれば誰でも同じ選択をする
http://www.geocities.jp/meir/cygwin_ck/
Cygwin用まともなterminal emulator
ただし、ページは404
poderosaを勧められたので見てみる。
食わず嫌いだったけど、結構いいかも。
とりあえずcygwin端末として採用。
Firefoxの拡張でAutoPager入れたら死ぬほど重くなったので
以下のファイル内の不要なエントリを削除。
C:\Users\ユーザ名\AppData\Roaming\Mozilla\Firefox\Profiles\nnn.default\
autopager\*.xml
多少は軽くなったけどGreasemonkey版のAutoPagerizeの方がいいかな。。。
WebDevelopperのView Generated Sourceを知った。
JS等で構築後のソースが見えるので、Google Mapsの構築後のHTMLソースを見たりできる。
FirebugのHTML tabでもいいけど全文検索できたりするのは便利。
6個とか、7個の引数の順番なんて覚えられん。
var so = new SWFObject();
so.setAttribute('swf', 'flash.swf');
so.setAttribute('id', 'swf_id');
so.setAttribute('width', '100');
so.setAttribute('height', '100');
so.setAttribute('version', '8');
so.write('target_id');
var img = new Image();
img.src = '../.././././.././g.gif';
console.log( img.src );
で相対パスを絶対パスに変換できる。
ただし、変換した要素はブラウザに読み込まれるので注意。
(参照元では「読み込まれない」とあるが、firebugで読み込んでいることを確認)
from
http://blog.kyosuke.jp/2008/03/06/49
jsのsortは数値型の要素でもとにかく文字列で比較する。
( [ 1, 11, 3, 2 ] ).sort() [1, 11, 2, 3]
数値として比較するならこう。
(UFO演算子(「<=>」)がないので書きにくい。。。)
( [ 1, 11, 3, 2 ] ).sort( function( a, b ){ return ( a - 0 > b - 0 ) ? 1
: -1 } ) [1, 2, 3, 11]
文字型と数値型が混ざっている場合、ソートした上で元の型を保持する。
( [ 1, '11', '3', 2 ] ).sort( function( a, b ){ return ( a - 0 > b - 0 )
? 1 : -1 } ) [1, 2, "3", "11"]
jQueryのeachの書式を間違って覚えていたことが判明。
「$( [] ).each( function() {} )」ではなくて、「$.each( [], function() {} )」の方が正しいよう。
(最初の書式はjQuery objectのeachで、arrayをeachするなら後の書式)
「$( [] ).map( function() {} )」をつかってて気づいた。
(帰ってくるのがjQuery objectなのでおかしいなと思った)
でも「$.map( [], function() {} )」より、「$( [] ).map( function() {} )」の方がかっこよくて好き。
(Arrayがいるなら「$.makeArray( $( [] ).map( function() {} ) )」となって
微妙だけど)
ついでに「$.map( [], function() {} )」は「[]」の要素をargumentsとして受けるけど、「$( [] ).map( function() {} )」は「[]」の要素をthisとして受ける。
(function内の書式が違うので注意)
$([]).each(function () {});形式のループはlabel jumpができない。
$([]).each(
$([[],[]]).each(function () {
var f = true;
$(this).each(function () {
if (this) return;
return f = !f;//ほんとはここから二段抜けたい
});
return f;
});
});
こういうときはlabel gotoがほしくなる。
結局forで書き直したけど。
Math.max.apply(null, new Array(1,2,3)) // -> 3
Math.min.apply(null, new Array(1,2,3)) // -> 1
二行だけど。
単純にMath.max、Math.minを使うと固定個数の数値からしか取得できないけど、applyとあわせると任意個数の配列内から取得できるので便利。
最速の辺からぱくってきた気がする。
$.getJSONはJSONとして解析不能な値が返るとcallback functionを呼んでくれない。
エラーも出ずに単純に呼ばれないだけなので要注意。
今までライセンス的にinterface.js使ってたけど、
jQuery1.1系にしか対応してなかったので微妙だった。
jQuery ScrollToがあるのは知ってたけど、
ライセンスがGPLなので避けてた。
が、こないだ見たらライセンスがGPL+MITになったらしい。
いっそ自分で書こうかと思ってたけど、
これで安心して使える。
個人的にはGPL好きなんだけど、
JSで使うとどこまでGPLになるのかわからないので不安。
(HTML本文は違うと思うけど、マークアップ部分は?とか、連携するswfは?とか)
http://plugins.jquery.com/project/ScrollTo
$('#id').get(0);
$('#id')[0]よりきれい。
静岡県立美術館に行く。
目的はロダン体操。
とりあえず、これなんてジョジョ立ち?
非常にひっそり解説ビデオが流されてたのが印象的(黒歴史?)
内容は結構難易度が高いものもあり、
インストラクターの人も微妙に再現できてなかったり。
「ポイントは、どれだけロダン彫刻になりきるかです。」とのこと。
こんな方法も教えてもらった。
(リファレンスはここ)
許容範囲か。
$c->addSelectColumn(TableNamePeer::ID);
$result = array();
$rs = TableNamePeer::doSelectRS($c);
$rs->setFetchMode(ResultSet::FETCHMODE_ASSOC);
while ($rs->next()) {
$result[] = $rs->getRow();
}
var_dump($result);
$c->toString();
デバッグモードよりこっちのほうが分かりやすくていい。
この程度のことをフレームワークごとに覚えるなんてやってられん。