プログラミングで飯を食え。腕をあげたきゃ備忘録!

PHP、JavaScript、HTML5、CSS3などWEB系言語を中心に基本テク、備忘録をまとめます。Android、Iphoneアプリ開発についても!

PHPで配列からselect系のSQLを自動生成する関数!使用方法!

サクウェブTVはコチラ↓↓↓
サクウェブTV

実際の関数のソースは>>前の記事<<

 

さて使い方です。

使用できる設定は

conditions where文を生成する為の検索条件を指定します。
fields 抽出するカラム名を指定します。
order ソートの条件を指定します。
limit 抽出するレコードの最大数を指定します。

ちなみにテーブルの結合もできますが、その方法は後で説明します。

使用方法は以下のように配列を関数の引数に指定して変数で受けます。

$conditions = array(
    //設定内容
);
$sql = @mkSQL($conditions);

さて、設定方法を説明します。

一つのテーブルから

//appleテーブルから抽出
$conditions = array("apple");

複数のテーブルを結合して抽出する

//appleテーブルとorangeテーブルを結合して抽出
$conditions = array("apple","orange")

ちなみに、一つ目のテーブルに二つ目のテーブルを結合します。

結合するためにはappleテーブルにidフィールド、orangeテーブルにapple_idフィールドが存在する必要があります。

3つ以上も結合できますが、一つ目のテーブルにそれ以降のテーブルが全て結合されます。

ちなみに、LEFT JOINです。

テーブルに検索条件をいろいろつけてみる

//idが3でnameがtanakaのものを抽出
$conditions = array(
    "apple"=>array(
        "conditions"=>array(
            "id"=>3,
            "name"=>"tanaka"
        )
    )
);
//idが3以上でnameがtanakaではない
$conditions = array(
    "apple"=>array(
        "conditions"=>array(
            "id >= ?"=>3,
            "name <> ?"=>"tanaka"
        )
    )
);
//conditionsではキーの中の?に値がはめこまれる仕組みです
//idが1,2,3でnameにtanakaが含まれる
$conditions = array(
    "apple"=>array(
        "conditions"=>array(
            "id IN (?,?,?)"=>array(1,2,3),
            "name LIKE ?"=>"%tanaka%"
        )
    )
);
//conditionsではキーの中の?に値がはめこまれる仕組みです
//上の条件にorderやらlimitやらfieldsやらいれてみる
$conditions = array(
    "apple"=>array(
        "conditions"=>array(
            "id IN (?,?,?)"=>array(1,2,3),
            "name LIKE ?"=>"%tanaka%"
        ),
        "fields"=>array(
            "id","name"
        ),
        "order"=>array("id"=>"DESC"),
        "limit"=>10
    )
);
//conditionsではキーの中の?に値がはめこまれる仕組みです
//さらにorangeテーブルを結合してみる
$conditions = array(
    "apple"=>array(
        "conditions"=>array(
            "id IN (?,?,?)"=>array(1,2,3),
            "name LIKE ?"=>"%tanaka%"
        ),
        "fields"=>array(
            "id","name"
        ),
        "order"=>array("id"=>"DESC"),
        "limit"=>10
    ),
    "orange"=>array()
);
//conditionsではキーの中の?に値がはめこまれる仕組みです
//さらにさらにorangeテーブルに条件を追加してみる
$conditions = array(
    "apple"=>array(
        "conditions"=>array(
            "apple.id IN (?,?,?)"=>array(1,2,3),
            "apple.name LIKE ?"=>"%tanaka%"
        ),
        "fields"=>array(
            "apple.id","apple.name"
        ),
        "order"=>array("apple.id"=>"DESC"),
        "limit"=>10
    ),
    "orange"=>array(
        "conditions"=>array(
            "orange.name LIKE ?"=>"%yamada"
        ),
        "fields"=>array(
            "orange.id","orange.name"
        )
    )
);
//conditionsではキーの中の?に値がはめこまれる仕組みです
//抽出するフィールド名を指定してみる
$conditions = array(
    "apple"=>array(
        "conditions"=>array(
            "apple.id IN (?,?,?)"=>array(1,2,3),
            "apple.name LIKE ?"=>"%tanaka%"
        ),
        "fields"=>array(
            "apple.id AS apple_id","apple.name AS apple_name"
        ),
        "order"=>array("apple.id"=>"DESC"),
        "limit"=>10
    ),
    "orange"=>array(
        "conditions"=>array(
            "orange.name LIKE ?"=>"%yamada"
        ),
        "fields"=>array(
            "orange.id AS orange_id","orange.name AS orange_name"
        )
    )
);
//conditionsではキーの中の?に値がはめこまれる仕組みです

はい。こんな感じ。

使い方はもう一度言いますが、

$conditions = array(
    //設定内容
);
$sql = @mkSQL($conditions);

です。

あとは生成したSQLをそれぞれの方法でクエリして下さい。

環境によって方法が違うと思いますのでそこは説明しません。

よかったら使ってみてくださいね!