MW211 EXIT

devlog
PHP配列/先頭と末尾を取得(1)
2012年09月07日
配列の先頭のデータを取得する関数。
┌──────────────────────────────────────┐
│array_shift($配列);                                                         │
└──────────────────────────────────────┘
配列の末尾のデータを取得する関数。
┌──────────────────────────────────────┐
│array_pop($配列);                                                           │
└──────────────────────────────────────┘
これらは、添字が連番じゃない時とか、非常に便利だ。

た・だ・し、重大な欠点がある。
取得した値を配列から除去してしまうという作用だ。
元々、そういう目的の関数を参照用に流用しているだけの話だ。

じゃどうすればよいか。
一旦、値渡しで何らかの一時配列に渡して、後は好きにやってくれってのが思い当たる。
┌──────────────────────────────────────┐
│$ワーク = $配列;                                                            │
│array_pop($ワーク);                                                         │
└──────────────────────────────────────┘

でも、なんかまどろっこしい。
一行でやれないものか。。。

ダミーで一関数噛ませてやって、ワーク変数的に扱えばいいじゃん。
ってことで、人畜無害な足し算関数「array_merge()」を使用。
┌──────────────────────────────────────┐
│array_pop(array_merge($配列));                                              │
└──────────────────────────────────────┘

しかしながら、敵もさるもの、ワーニングを吐いてしまう。
┌──────────────────────────────────────┐
│Strict Standards: Only variables should be passed by reference in …        │
└──────────────────────────────────────┘

う~ん、これでどうだ。(なんか無理やり)
┌──────────────────────────────────────┐
│@array_pop(array_merge($配列));                                             │
└──────────────────────────────────────┘
分類:PHP配列
jQuery/リアルタイムAjax表示のエラー
2012年09月06日
AjaxでJSON形式のデータを取得し、表示中の内容を書き換える処理を
断続的に行ったりすると、エラーが発生する。
どうも「TypeError」が発生するようなのだが、なんでだろう。
┌──────────────────────────────────────┐
│function autoFunc() {                                                       │
│    $.getJSON('AjaxURL',                                                    │
│              function(json) {                                              │
│                  try {                                                     │
│                      if (json) {                                           │
│                          $('#this').text(json.data);                       │
│                      }                                                     │
│                  } catch (e) {                                             │
│                      if (e.name == 'TypeError') {                          │
│                          throw e;  // エラーを握り潰す                     │
│                      } else {  // 他エラーを調査                           │
│                          alert(e.name);                                    │
│                          alert(e.message);                                 │
│                      }                                                     │
│                  }                                                         │
│              }                                                             │
│    );                                                                      │
│    setTimeout(autoFunc, 1000);  // 1秒でリロード                           │
│}                                                                           │
└──────────────────────────────────────┘
ま、こんな感じで調査してみる。
分類:jQuery
PostgreSQL/日付を変更して更新
2012年09月05日
「年月日」の文字列、例えば「20120801」とかを一日前に置換するUPDATE文。
┌──────────────────────────────────────┐
│UPDATE 表                                                                   │
│    SET 日付 = TO_CHAR(TO_DATE(日付, 'YYYYMMDD') - 1, 'YYYYMMDD');          │
└──────────────────────────────────────┘
「20120731」になる。
分類:PostgreSQL
PHP/日付チェックと日付変換
2012年09月04日
年月日をチェックしてくれる便利な関数「checkdate()」と、
チェックした後の日付をタイムスタンプに変換してくれる便利な関数「mktime()」。

二人の連携は見事にとれている…と思ったけど。
「mktime()」は2038年以降NGなのにも関わらず「checkdate()」はOKを出す。
「checkdate()」は32767年までOKなのだ。

う~ん。
分類:PHP
剰余計算プラス
2012年09月03日
剰余計算で剰余ゼロの場合、割った数が欲しいケースってありますよね。
例えば、3の剰余を求める場合
  1  →  剰余1  →  解1
  2  →  剰余2  →  解2
  3  →  剰余0  →  解3
  4  →  剰余1  →  解1
  5  →  剰余2  →  解2
  6  →  剰余0  →  解3
こんな感じ。
これを行う最適な方法とは?
分類:【未解決】
PostgreSQL/条件でログを削除する
2012年09月02日
年月日時分秒ごとにデータを記録しているログデータについて、
翌日になったらクリアしてから追加していくトリガ関数は以下のような感じ
┌──────────────────────────────────────┐
│DECLARE                                                                     │
│    pl_yyyymmdd CHAR(8);                                                    │
│                                                                            │
│BEGIN                                                                       │
│    SELECT INTO pl_yyyymmdd                                                 │
│                SUBSTR("yyyymmddhhiiss", 1, 8) AS "yyyymmdd"                │
│        FROM 表;                                                            │
│                                                                            │
│    IF TG_OP = 'INSERT' THEN                                                │
│        IF SUBSTR(NEW.yyyymmddhhiiss, 1, 8) <> pl_yyyymmdd THEN             │
│            DELETE FROM 表;                                                 │
│                                                                            │
│            RETURN NEW;                                                     │
│        END IF;                                                             │
│    END IF;                                                                 │
│                                                                            │
│    RETURN NEW;                                                             │
│END;                                                                        │
└──────────────────────────────────────┘
こいつをトリガとして登録すればOK。
┌──────────────────────────────────────┐
│CREATE TRIGGER トリガ                                                       │
│  BEFORE INSERT                                                             │
│  ON 表                                                                     │
│  FOR EACH ROW                                                              │
│  EXECUTE PROCEDURE トリガ関数();                                           │
└──────────────────────────────────────┘
これってINSERTの度に判断するんだろうけど、負荷がかかるのだろうか?

DELETEに代えてTRUNCATE TABLEにしようとしたら、エラーとなった。
┌──────────────────────────────────────┐
│DECLARE                                                                     │
│    pl_yyyymmdd CHAR(8);                                                    │
│                                                                            │
│BEGIN                                                                       │
│    SELECT INTO pl_yyyymmdd                                                 │
│                SUBSTR("yyyymmddhhiiss", 1, 8) AS "yyyymmdd"                │
│        FROM 表;                                                            │
│                                                                            │
│    IF TG_OP = 'INSERT' THEN                                                │
│        IF SUBSTR(NEW.yyyymmddhhiiss, 1, 8) <> pl_yyyymmdd THEN             │
│            TRUNCATE TABLE 表;                                              │
│                                                                            │
│            RETURN NEW;                                                     │
│        END IF;                                                             │
│    END IF;                                                                 │
│                                                                            │
│    RETURN NEW;                                                             │
│END;                                                                        │
└──────────────────────────────────────┘
これからINSERTしようとする表をDDLのレベルでは操作できないようだ。
ま、全件削除ってより、1ヶ月過ぎたのを削除とかが普通かも。
分類:PostgreSQL
前へ 1 2 3 次へ