MW211 EXIT

devlog
PostgreSQL/insertしたレコードのIDを取得
2011年09月14日
insertしたデータのシーケンシャルIDを取得する方法は以下の通り。
#selectと取得するとその間に割り込みの危険性があるからこの方法で
┌──────────────────────────────────────┐
│$pg_db = pg_connect('host=ホスト名 port=ポート名 dbname=DB名                │
│ user=ユーザ名 password=パスワード);                                        │
├──────────────────────────────────────┤
│$sql = "INSERT INTO 表 (列) VALUES ('値') RETURNING id";                    │
│$pg_result = pg_query($pg_db, $sql);                                        │
│$row = pg_fetch_array($pg_result);                                          │
└──────────────────────────────────────┘
ここで「$row['id']」を参照する。

INSERT文のSQL発行と同時にSELECT文のSQLを発行して取得したようなイメージ。
「RETURNING」句を使うのがミソ。
SELECT句と同じような指定になる。

一方、PDOの場合は以下のような感じになる。
┌──────────────────────────────────────┐
│$dbh = new PDO(DSN名, ユーザ名, パスワード);                                │
├──────────────────────────────────────┤
│$sql = "INSERT INTO 表 (列) VALUES ('値')";                                 │
│$sth = $dbh->prepare($sql);                                                 │
│$sth->execute();                                                            │
└──────────────────────────────────────┘
ここで「$dbh->lastInsertId('シーケンスオブジェクト名')」を参照する。

シーケンスオブジェクト名とは、「表名_id_seq」みたいなやつ。
AutoNumber的な項目をCREATE文実行すると自動で作成されるみたい。
MySQLの場合はこれが不要(「()」でいい)らしい。
分類:PostgreSQL
PostgreSQL/連番初期化
2011年09月06日
PostgreSQLのAutoNumber機能(bigserial型など)を、
「1」に初期化するSQL文は以下のとおり。
┌──────────────────────────────────────┐
│ALTER SEQUENCE AutoNumber用列名 RESTART WITH 1;                             │
└──────────────────────────────────────┘
なお、下記でも代用できる。
┌──────────────────────────────────────┐
│SELECT SETVAL ('AutoNumber用列名', 1, false);                               │
└──────────────────────────────────────┘
この場合、第一引数の「AutoNumber用列名」を「'」で囲うことに注意。
また、第三引数に「SELECT SETVAL」の「is_called」を抑制する
「false」指定を行わないと、一件目の挿入データが「2」から始まってしまうので
こちらも注意が必要である。

なお、「TRUNCATE TABLE」で表を初期化する場合には、
「RESTART IDENTITY」オプションを付加してあげれば、上記のことをやってくれる。
┌──────────────────────────────────────┐
│TRUNCATE TABLE 表 RESTART IDENTITY;                                         │
└──────────────────────────────────────┘
分類:PostgreSQL
PostgreSQL/timestamp型を文字列として参照
2011年09月02日
timestamp型の項目を「YYYY-MM-DD HH:II:SS」(例:2011-09-02 12:34:56)の形式で
文字列として参照する場合は、「TO_CHAR()」を使う。
┌──────────────────────────────────────┐
│SELECT TO_CHAR("列",'YYYY-MM-DD HH24:MI:SS') AS "列",                       │
│    FROM "表";                                                              │
└──────────────────────────────────────┘
分類:PostgreSQL
PostgreSQL/出力順の指定
2011年08月27日
PostgreSQLには(MySQLでいうところの)「ORDER BY FIELD」がないので、
以下で代用する。
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 表                                                                 │
│    WHERE 列 IN (1, 3, 2)                                                   │
│    ORDER BY CASE 列                                                        │
│               WHEN 1 THEN 1                                                │
│               WHEN 3 THEN 2                                                │
│               WHEN 2 THEN 3                                                │
│               ELSE        0                                                │
│             END ASC;                                                       │
└──────────────────────────────────────┘
分類:PostgreSQL
PostgreSQL/ダミー条件文
2011年08月25日
(複数の)条件文(WHERE句)をプログラムなどで機械的に作成する場合、
「AND」から始まる単位(「AND ~」)で結合していきたいケースがある。

そんな時便利な、先頭に設置する
あってもなくてもよい(必ず真になる)条件文は以下の通り。
「WHERE TRUE」

例えば以下のような感じ。
┌──────────────────────────────────────┐
│SELECT *                                                                    │
│    FROM 表                                                                 │
│    WHERE TRUE                                                              │
│      AND 列1 > 0                                                           │
│      AND 列2 > 0;                                                          │
└──────────────────────────────────────┘
分類:PostgreSQL
前へ 1 2 3 4 5 6 7 8 9 10 11 次へ