greasemonkey for 4u
4u を眺めるとき、4u にもともとあるスライドショーを使うまでもないけど
マウススクロールじゃ物足りない(僕の場合、ThinkPadのトラックボールだからなおさらめんどい)
そんな時用に、流し見する程度の簡単なスライドショー的な greasemonkey を作ったので
どこからでも使えるように自分用にアップしといた。
ubuntu + php + symfony インストール編
いまさらだけど、PHPのFrameworkとしてsymfonyを触ってみる
インストール
今回は1.0系をいれてみる → 参考 symfony
- /etc/apt/sources.list の更新
$ diff /etc/apt/sources.list /etc/apt/sources.list.orig 2d1 < deb http://www.symfony-project.org/get debian/
- list の update
$ sudo apt-get update
- install
$ sudo apt-get install php5-symfony
インストール終わり。案外すんなり入りました。
実行ファイルの確認
$ type symfony symfony is /usr/bin/symfony
次は簡単なアプリの作成をやってみよう
リストから絞り込んで取得すると共にトータル件数を取得
例えば
table +--------------+ | id | name | +-----+--------+ | 1 | name1 | +-----+--------+ | 2 | name2 | +--------------+
こんなテーブルがあったとして、普通なら
1. リストを取得
SELECT id, name FROM table /* Oracle */ WHELE ROWNUM BETWEEN :START AND :END /* MySql */ LIMIT :COUNT OFFSET :OFFSET
2. トータル件数取得
SELECT COUNT(id) AS total FROM table
なんて感じですごく効率の悪いことをしていた。
けど、ちょっと調べてみたらもっと便利にリストとトータル件数を取得できるらしい。
Oracle の場合
OVER() を使う
SELECT id, name, COUNT(id) OVER() AS total FROM table WHERE ROWNUM BETWEEN :START AND :END
さくらでPDOを使ってMYSQLを使う
そもそも
さくらインターネットではPHP5.2が使えるようになったが、どういうわけかMYSQLのPDOドライバーが入ってないみたい。
別にPDO使わなくてもいいじゃんって思うけど、どんなDBでも同じように書けるのでいつも使っているです。
だから、さくらでもせっかくmyswlサーバまでかりれるんだからそれを使うためにPDOでやりたい。
PHP5.2 インスコ
ソースを取ってくる
$ mkdir package $ cd package $ wget http://jp.php.net/get/php-5.2.5.tar.gz $ tar -zxvf php-5.2.5.tar.gz $ cd php-5.2.5
コンパイルする前の準備
さくらでデフォルトで入ってるPHPの configure
'./configure' '--prefix=/usr/local/php-5.2.5' '--enable-force-cgi-redirect' '--enable-mbstring' '--enable-mbregex' '--with-openssl=/usr' '--with-gd' '--with-zlib=/usr' '--with-jpeg-dir=/usr/local' '--with-png-dir=/usr/local' '--with-ttf' '--with-freetype-dir=/usr/local' '--with-mysql=/usr/local' '--enable-soap' '--with-curl' '--with-xsl=/usr/local' '--with-gettext=/usr/local' '--enable-exif'
まぁ。PDO入ってないですよね。
そこで。
以下のファイルを準備。(ファイルじゃなくて直接実行してもいいけどあとで修正したいかもしれないから忘れないように。)
#!/bin/sh ./configure \ --prefix=$HOME/php \ --program-suffix=5 \ --with-config-file-path=$HOME/www/cgi-bin \ --with-pear=$HOME/php/pear \ --enable-force-cgi-redirect \ --enable-mbstring=all \ --enable-mbregex \ --with-openssl=/usr \ --with-gd \ --with-zlib=/usr \ --with-jpeg-dir=/usr/local \ --with-png-dir=/usr/local \ --with-ttf \ --with-freetype-dir=/usr/local \ --with-mysql=/usr/local \ --enable-soap \ --with-curl \ --with-xsl=/usr/local \ --with-gettext=/usr/local \ --enable-exif \ --with-pdo-mysql \ --enable-pdo \ --enable-sqlite-utf8 \
確認
これでphpinfo()とか実行してみたら、
PDO drivers sqlite2, sqlite, mysql
うまー
あるカラムの前後を取得するのが重いんです
環境
- Oracle10g
普通はこんなやりかた
select prev,next from ( select id, lag( id ) over( order by id ) as prev, lead( id ) over ( order by id ) as next from hoge ) where id = :ID;
でもこれだとすげー遅い。
なので、もっと効率よくとれないかと思って色々やってみた。
そもそも lag,lead を使うのをやめる
select h.id, h.name from hoge h, ( select max( id ) as id from hoge where id < :ID order by id ) prev, ( select min( id ) as id from hoge where id > :ID order by id ) next where h.id in ( prev.id, :ID , next.ID ) and rownum <= 3;
lag,lead とちがって max,minならフルアクセスしないで1レコードしか取ってこないから激早
ついでにいうと、 in の中の要素数を rownum <= で指定してやるとさらに効果大
よかった、一安心。
ちなみに、mysql なら・・・
select id as prev from hoge where id < :ID order by id asc limit 1; select id as next from hoge where id > :ID order by id desc limit 1;
これだけでいいのに。。