Pdo\Sqlite::createCollation
SQL文で文字列比較関数として使うユーザー定義関数を登録する
説明
public bool Pdo\Sqlite::createCollation(string $name
, callable $callback
)
このメソッドは Pdo\Sqlite::createFunction
と似ていますが、文字列比較関数を登録する点が異なります。
パラメータ
-
name
-
作成または再定義する文字列比較 SQL 関数の名前
-
callback
-
文字列比較の動作を定義するコールバック関数です。
この関数は2つのstringを受け取り、
1番目の文字列が2番目の文字列より前に並ぶ場合
-1
、
同じ並び順の場合 0
、
後に並ぶ場合 1
を返さなければなりません。
これに似た振る舞いをする組み込み関数として、strcmp が挙げられます。
This function need to be defined as:
int collation(string $string1
, string $string2
)
戻り値
成功した場合に true
を、失敗した場合に false
を返します。
例
例1 Pdo\Sqlite::createCollation の例
<?php
$db = new Pdo\Sqlite('sqlite::memory:');
$db->exec("CREATE TABLE test (col1 string)");
$db->exec("INSERT INTO test VALUES ('a1')");
$db->exec("INSERT INTO test VALUES ('a10')");
$db->exec("INSERT INTO test VALUES ('a2')");
$db->sqliteCreateCollation('NATURAL_CMP', 'strnatcmp');
foreach ($db->query("SELECT col1 FROM test ORDER BY col1") as $row) {
echo $row['col1'] . "\n";
}
echo "\n";
foreach ($db->query("SELECT col1 FROM test ORDER BY col1 COLLATE NATURAL_CMP") as $row) {
echo $row['col1'] . "\n";
}
?>
参考
- Pdo\Sqlite::createFunction
- Pdo\Sqlite::createAggregate
- sqlite_create_function
- sqlite_create_aggregate