SQLで2つ以上のIDでin検索

MySQLなどで、たまにDBの構造上、2つのIDでin(複数)検索したい時がある。
ちから技でand検索などするのもいや場合があるので、そいいう時は、concatで連結して、in検索!

select
*
from
where
concat(A_ID,'-',B_ID) in(a_id-b_id)

ただ分かりづらくなる可能性もあるので、ご注意を。

twitter APIでxmlの取得失敗時の対処メモ

twitterのAPIを利用する時によく使うxmlでの取得対策用にメモ。

PHPでこんな感じでかいてます。

<?php
try{
	$xml = simplexml_load_file($url);
	if(!$xml){
		throw new Exception("XMLを取得できせん");
	}
}catch(Exception $e){
	echo $e->getMessage();
}
?>

cakephp 指定のViewでheader内にjs、cssを指定するメモ

cakephp1.3を利用していて、指定の画面だけに、特定のCSSやjavascriptを利用したい場合がある

便利なようにcakephpでは、下記方法で指定が可能でした。

 

# app/view/hoge.ctp
echo $html->script('jsfile', array('inline' => false));
echo $html->css('cssfile', null, array('inline' => false));

ただ条件として、app/webroot/layout/default.ctpなどで、
予め、

<head>
<?
echo $scripts_for_layout;
?>
</head>

となっている必要があります。

 

またインラインでjs,CSSを利用したい場合は、普通に下記のように設定すればOK!

Viewはこんな感じ

#app/view/hoge.ctp
<?php
echo $javascript->link('jsfile');
?>

コントローラは↓

#app/controllers/hoges_controller.php

var $helpers = array('Javascript');

PHP 可変変数使いどころ

${"var"} = "123";

PHPの可変変数を使えば、変数名をいじって利用できる、特にループ処理などに有効活用できる。

foreach($device as $key => $val){
$RESULT_ = "result".$key;   //可変変数名
echo $RESULT_;
print_r(${$RESULT_}); 
}

$result1 $result2 $result3 ・・・・
の配列が1つのループで出せます。

一応メモ!

CakePHP 1.2をつかっていたが1.3に移行すると動かなくなった機能メモ

 

  • $form->year $from->dayの引数が変わった
$form->year("Info.DAILY_YMD",2009,2016,null,null,false)."年";

と利用していた場合は、最後の引数が利用できなくなっていたので、下記のように配列で最後の引数で指定できる。

$form->year("Info.DAILY_YMD",2009,2016,"now-1 day",array('empty' => false))."年";

上記同様に$form->dayも同じノリで変更しないと動きませんでした。

 

  • renderElementがelementという名前に変わった
echo $this->renderElement("indextest");

↓ elementに!

echo $this->element("indextest");

他にも色々でてきそうですが、取り急ぎ変わった点をメモ。

vim 改行コード「^M」を取り除く

「^M」の入力がわからなかったのでメモ。

vimで開いたファイルを、下記コマンドで置換するのだが、

:%s/^M//

入力方法を間違えると、うまく置換できないので、

Controlキー+v Controlキー+mで「^M」と入力できます。

CakePHP データベースの切り替えメモ

app/config/database.php に

        var $second_db = array(
                'driver' => 'mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'usertest',
                'password' => '******',
                'database' => 'testdb2',
        );

のように追記し、対象のモデルで、

$useDbConfig = 'second_db';

とすれば指定していできます。

※デフォルトではdatabase.phpの$defaultが呼ばれるようです。

 

http://blog.syuhari.jp/archives/142

上記サイトを参考にさせていただきました。
ありがとうございます!

 

Linux 行数がファイルを指定行分で分割する。

Linuxのターミナルで、たまにCSVファイルの行数がおおすぎて、エクセルで開けないケースがる、ちょっと前のエクセルで、65536までしかダメったかな?

そんな場合は下記コマンドで分割
下記は50000行毎に分割する例。
実行すると、xaa xab ・・・などいうファイル名で分割ファイルが作られます。

# split -l 50000 file_20110826.csv

C++ ビット操作によるフラグの扱いメモ

C++でアセンブラを触る際非常に高速軽量化に必要なビット操作、
それ利用した、ビット操作によるフラグの扱いを下記にメモします。

 

変数の各ビットを、フラグとして使用する。

 char cflag = 0; → 0000_0000 → フラグ8つ

8ビット       ビット(2進数の表記)

           で8ケタ。0か1か、

           が8つ扱える。

 

サンプル

 

 0 0 0 0_0   

     未使用    ③ ② ①

 

生死を扱う ②性別を扱う ③無敵かどうか

 

0ビット目・・・1なら生、0なら死

 1ビット目・・・0なら男、1なら女

 2ビット目・・・0なら通常、1なら無敵

                                       

        1にする  0にする  調べる          

0ビット目    |1     &(~1)  &1が0でなければ  

(生死)                             

1ビット目   |(1<<1) &(~(1<<1)) &(1<<1)が、0でなければ

(性別)                             

2ビット目   |(1<<2) &(~(1<<2)) &(1<<2)が、0でなければ

(無敵)                             

 

//———–インクルード————————–

#include <stdio.h> //基本的な入出力のヘッダファイル

#include <stdlib.h> //itoa()などに必要なヘッダファイル

 

//――――――メイン関数―――――――――――――――――――――――――――――――――――――――――

void main()

{

char cflag = 0; // (2進数では 0000_0000)

 

//―――――0ビット目を調べる――――――――――――――――――――――――――――

if(cflag & 1) //cflagの0ビット目(生死)だけを調べる。

{

printf(“0ビット目は1。生きているn”); //0ビット目が0でない(1)なら、生存

}else

{

printf(“0ビット目は0.死んでいるn”); //1ビット目が1でない(0)なら、死んでいる

}

 

cflag = cflag | 1; //0ビット目を1にする

printf(“0ビット目を1にする。死んでいた場合、生きかえるn”);

 

//生きているか死んでいるかもう一度表示

if(cflag & 1) //cflagの0ビット目(生死)だけを調べる。

{

printf(“0ビット目は1。生きているn”); //0ビット目が0でない(1)なら、生存

}else

{

printf(“0ビット目は0.死んでいるn”); //1ビット目が1でない(0)なら、死んでいる

}

 

cflag = cflag & (~1); //0ビット目を0にする。

printf(“0ビット目を0にする。生きていた場合、死亡するn”);

 

if(cflag & 1) //cflagの0ビット目(生死)だけを調べる。

{

printf(“0ビット目は1。生きているn”); //0ビット目が0でない(1)なら、生存

}else

{

printf(“0ビット目は0.死んでいるn”); //1ビット目が1でない(0)なら、死んでいる

}

}

 

練習問題

 

1、性別や、無敵かどうか、なども、サンプルと同じように確認せよ。

 

//———–インクルード————————–

#include <stdio.h> //基本的な入出力のヘッダファイル

#include <stdlib.h> //itoa()などに必要なヘッダファイル

//――――――メイン関数―――――――――――――――――――――――――――――――――――――――――

void main()

{

char cflag = 127; // (2進数では 0000_0000)

char Moji[33]; //文字列を扱うchar型配列を宣言

itoa(cflag,Moji,2); //cflag2進数にしてMojiに代入

printf(“cflag = %sn”,Moji); //cflag2進数にした値を表示

 

//cflagの0ビット目を調べる

if(cflag & 1) //cflagの0ビット目(生死)だけを調べる。

{

printf(“0ビット目は1。生きているn”); //0ビット目が0でない(1)なら、生存

}else

{

printf(“0ビット目は0.死んでいるn”); //0ビット目が1でない(0)なら、死んでいる

}

 

//cflagの1ビット目を調べる

if(cflag & (1<<1)) //cflagの1ビット目(性別)だけを調べる

{

printf(“1ビット目は1。男n”); //1ビット目は0でない(1)なら、男

}else

{

printf(“1ビット目は0.女n”); //1ビット目は1でない(0)なら、女

}

 

//cflagの2ビット目を調べる

if(cflag & (1<<2)) //cflagの2ビット目(無敵かどうか)だけを調べる

{

printf(“2ビット目は1。無敵n”); //2ビット目は0でない(1)なら、無敵

}else

{

printf(“2ビット目は0。無敵じゃないn”); //2ビット目は1でない(0)なら、無敵じゃない

}

}