Archives by date

You are browsing the site archives by date.

【MySQL】WHERE句で範囲指定する。

めも。

たとえば特定のカラムの値が10~20のものを取得したいといった場合に便利。

WHERE col_name BETWEEN 10 AND 20

上記のSQLは「以上」、「以下」を指定するための演算子なので10と20は含まれることに注意。

またNOTを付加することで否定の条件も指定可能

WHERE col_name NOT BETWEEN 10 AND 20

 

【CakePHP2.4】find()メソッドでorder by句を指定する。

調べてみたら普通にオプションで渡すだけだった。

$options = array(
	'group' => 'col_name'
);

$this->Model->find('all', $options);

意外と今まで知らなかったので戒めも。

 

【MySQL】GROUP BYを複数カラム指定する際の注意点。

GROUP BY句を複数指定する場合は、下記の通りカンマ区切りでカラム名を指定する。

SELECT *
FROM table_name
GROUP BY col_1, col_2, col3

また下記のようにソート順をそれぞれで指定することも可能。

SELECT *
FROM table_name
GROUP BY col_1 DESC, col_2 ASC

 

【MySQL】SELECT文をチューニングするための情報を取得する。

めも。

SQLを発行する再、文の一番先頭に「EXPLAIN」とつけると、オプティマイザのデバッグ情報を取得することが出来る。

下記例。

EXPLAIN SELECT * FROM table_name WHERE id = 1

上記SQLによって取得出来る情報の「type」の欄が重要。

「type」には下記表のものが多く見られる。

system テーブルに1レコードしかない状態
const マッチするレコードが1件しかない状態。PRIMARY KEYまたはUNIQUEインデックスを利用して検索される
eq_ref JOINにおいてPRIMARY KEYまたはUNIQUEインデックスを利用して1つのレコードを検索している状態。理想的なJOINの形式
range インデックスを用いた範囲検索
index すべてのレコードのインデックスをスキャンする必要がある状態(フルインデックススキャン)
ALL すべてのレコードを走査する必要がある状態(フルテーブルスキャン)

上から順に高速なので、なるべく上に近づくようなSQLを発行してやれば結果的にパフォーマンスは上昇する。

 

【Linux】Vimでカーソルを最終行、先頭行に移動させる方法。

メモ。

■最終行に移動する

Shift + g

■先頭行に移動する

gg [g2回]

■指定した行に移動する

:[行数] → Enter

 

【CakePHP2.4】発行されているSQLをコンソールから確認する方法。

CakePHPにてSQLを確認する方法は、ブラウザ上からデバッグキットを用いるか、sql_dumpの欄を見る方法がある。

ではコンソールから見たい場合はどのように取得すればいいのか?

ということで調べてみた。

■モデルから

$log = $this->getDataSource()->getLog();
var_dump($log);

■コントローラーから

$log = $this->Model->getDataSource()->getLog();
var_dump($log);

というように、getDataSouce()メソッドを用いることでSQLを取得することが出来た。