CakePHP:find関数;nullってなに?<IS NULL>と<NOT NULL>の書き方

初心者にはなかなか理解しづらい「null」。

そもそも「null」とは、

「NULLは特殊な値です.NULLは 「列名 = NULL」 や 「列名 <> NULL」 といった通常の比較演算子を用いた方法では検索することができません. NULLを対象として検索するにはIS NULL演算子,もしくはIS NOT NULL演算子を使用します.」

そして、

NULL値はデータが存在しないことを表す値です。大文字と小文字のどちらも使用できます。

NULLはデータが存在しないということなので、文字列における空文字”や数値における0とは異なります。

プログラムで使う変数は宣言をした時に領域が確保されます。

そのあと、変数が持っているアドレスが0.0.0.0の状態がnullです。

あ。これはちょっと広義的になってしまうので・・・・説明はここまでで・・・・

現在、CakePHPでプログラミングをしているので、

今回は

CakePHPのfind条件に「null」「not null」を使う方法を記述しておきます。

上記で記述したとおり、「NULLを対象として検索するにはIS NULL演算子,もしくはIS NOT NULL演算子」を使用すると書きました。これはそれぞれ書き方が違います。

<IS NULL>の場合

$data = $this->Model->find( 'all',
    array(
        'conditions' => array('Model.id' => NULL),
        'fields'     => null,
        'order'      => null,
        'recursive'  => 1,
    )
);

SQLでいうところの、IS NULL の方法。
単純に、 conditions に配列で指定するだけです。

これで WHERE Model.id IS NULL というSQLとなります。

<NOT NULL>の場合

NOT NULL の場合は、ちょっとだけひねって、”NOT”の2次元配列で条件を作成。

$data = $this->Model->find( 'all',
    array(
        'conditions' => array(
            'NOT' => array(
                'Model.id' => NULL)
        ),
        'fields'     => null,
        'order'      => null,
        'recursive'  => 1,
    )
);

カラムにNULL値を持つ事が出来ないように設定する方法になり、

これで、WHERE Model.id IS NOT NULL というSQLとなります。

とりあえずここまでにしますのが、

あと基本的に書き方が同じなfind条件での「IN」、「NOT IN」演算子の使い方については次回にしたいと思います。

 

それでは。。

第二回 PostgreSQL ~SELECT文~

SELECT文は、データベースからデータを取り出すための構文です。

SELECT文では、単にデータを取り出すだけでなく、さまざまなキーワードを組み合わせて取り出すデータを制限したり、条件を付けたりすることができます。

 

SELECT文には、いくつもキーワードがありますが、今回は以下の3つをしっかり覚えてください。

 

  • 「どの項目(列)のデータを検索するか」を指定する:SELECT
  • 「どの表から検索するか」を指定する:FROM
  • 「どのような条件で行を検索するか」を指定する:WHERE

表を指定してデータを取得しよう

 

表のすべての列データを指定するには、SELECTの後に「*(アスタリスク)」を指定します。構文はこちらになります。

SELECT  * ← 全てのデータの列を (SELECT句)

FROM  * ← どの表から (FROM句)

上記のようにSELECTキーワードに続いて列名を指定する部分を「SELECT句」、FROMで表名を指定する部分を「FROM句」と呼びます。

select * from 列名 ;

SELECT文の最後に指定している「;(セミコロン)」は、「ここで1つのSQL文が終わり」ということを示す記号です。重要ですので覚えておきましょう。

また、

select 列名,列名・・・・ ←(どの列のデータを)

from  表明 ←(どの表から)

*SELECTやFROMなどのキーワードや、表名、列名は、大文字、小文字どちらで書いても問題ありません。また、SELECT文が長くなるようであれば、途中で改行しても問題ありません。実際に仕事でSQL文を書くときは、ルールを決めて書き方を統一することをお勧めします。構文の書き方を統一しなければ、処理性能が低下してしまう可能性があるからです。

条件を指定して、特定の行データを検索しよう

全てのデータから、特定の行だけ取り出したいときは、「WHERE句」を使います。

SELECT  列名1, 列名2,           ←どの列のデータを(SELECT句)
FROM    表名                    ←どの表から(FROM句)
WHERE   列名 比較演算子 条件値  ←どのような条件の行を(WHERE句)


続きはまたあとで!

 

 

第一回PostgreSQL

PostgreSQLとは、データベースを管理するために使われるリレーショナルデータベース(RDB)管理システムです。また、オープンソースなため、世界中で使われているRDBです。

初心者が覚えるべき最低限の用語~概念を理解しよう~

概念:スキーマ:プログラミング手法における論理構造や物理構造を定めた仕様です。

似ているものに[mysql]がありますが、

[mysql]は

データベース → テーブル

[PostgreSQL]は

データベース → [スキーマ] → テーブル

と論理構造が違います。

select文とかcreate,where,delete文等は同じです。

しかし、[PostgreSQL]はスキーマ名を記入する必要があり、ドットでスキーマ名とテーブル名を記入しなければいけません。

例)

mysql
SELECT * FROM db_table;

【postgres】
SELECT * FROM schema_name.table_name;

まずはまずはまずは!、これだけ覚えておけば大丈夫でしょう。

次回はいくつかのコマンドを紹介したいと思います。

死活監視システムを置いてみよう

Xymon

死活監視とは、サーバーやサービスが稼動しているかどうかを監視することです。

Web事業を手がけるパラファミリーにとっても死活監視は大事なこと。

今日はその死活監視をしてくれるシステム Xymon を導入します。

(今までも運用していたのですが、今日は今までと別のサーバーにもうひとつ入れます)

続きを読む 死活監視システムを置いてみよう

脆弱性への対応は意外と進まない?

先日また明らかになったOpenSSLの脆弱性(CVE-2014-0224、弊社ではもちろん直ぐに対処したのですが、

大手のWebサイトでも対策が遅れているところがあるらしいです。

中間者攻撃は難しいから、そうそうやられるわけがない』などとたかをくくっている……というわけではないと思うのですが。



OpenSSLの脆弱性、いまだに悪用可能なWebサイトが相当数存在 – ITmedia エンタープライズ

続きを読む 脆弱性への対応は意外と進まない?

またもOpenSSL

ついこの前に盛大に心臓出血を起こして上を下への大騒ぎとなったばかりの OpenSSL ですが、

先日また新たな脆弱性が報告されました。



「OpenSSL」における Change Cipher Spec メッセージ処理の脆弱性対策について(JVN#61247051):IPA 独立行政法人 情報処理推進機構:



続きを読む またもOpenSSL

[PostfixAdmin]メールサーバーの建て方

先日の作業はメールサーバーの構築だったんですが、久々すぎて手順をすっかり忘れていました。

手順なんて調べればいくらでも出てきそうですけれど、リマインドも兼ねて手順を書いておきます。

前提として、

  • サーバー環境はCentOS6、root権限あり
  • なるべくyumパッケージを利用する
  • アカウントとメール転送の管理をWeb上から行えるようにする。

    Apacheは既に動いており、PostfixAdmin用にSSL付VirtualHostを追加可能。

以上の条件から、使用するパッケージは Postfix+Dovecot+PostfixAdmin+MySQL に決まり。

続きを読む [PostfixAdmin]メールサーバーの建て方