[[CodeIgniter]]

#contents

* CRUD [#q0c22802]
CRUD(クラッド)=「作成(Create)」「読み出し(Read)」「更新(Update)」「削除(Delete)」の略称。

** Create [#t9358901]
-MySQL INSERT 構文
http://dev.mysql.com/doc/refman/5.1/ja/insert.html

>INSERT  は既存テーブルに新しい行を挿入します。
INSERT ... VALUES と INSERT ... SET  型のステートメントは、明示的に指定された値に基づいて行を挿入します。
INSERT ... SELECT  型は別のテーブルから選択された行を挿入します。

#code(sql){{
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    VALUES ({expr | DEFAULT},...),(...),...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
}}

または:

#code(sql){{
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    SET col_name={expr | DEFAULT}, ...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
}}

または:

#code(sql){{
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
}}

-CodeIgniterのモデルクラスの記述例

#code(php){{
function insert($arg) {
  $this->load->database();
  $sql = 'INSERT IGNORE `table_name` SET
    `column_name1` = ? ,
    `column_name2` = ? ,
    `column_name3` = ?';
  $param = array($arg[1], $arg[2], $arg[3]);
  $this->db->query($sql, $param);
  return $this->db->insert_id();
}
}}

http://codeigniter.jp/user_guide_ja/database/helpers.html
>$this->db->insert_id()
データベースに行を挿入したときに、挿入した ID 番号を取得します。

** Read [#k015b9a4]
-MySQL SELECT 構文
http://dev.mysql.com/doc/refman/5.1/ja/select.html

>SELECT は、1つまたは複数のテーブルから選択した行を検索するために利用され、UNION ステートメントとサブクエリを含む事ができます。
>WHERE 条項がもしあれば、それは行が選択される為に満たさなければいけない条件を指示します。
where_condition は選択される行が真であるかを確認する式です。
ステートメントは、もし WHERE 条項がなければ全ての行を選択します。
>WHERE 条項の中では、総計 (要約) 関数以外の、MySQL がサポートする関数や演算子の全てを利用する事ができます。

#code(sql){{
SELECT
    [ALL | DISTINCT | DISTINCTROW ]
      [HIGH_PRIORITY]
      [STRAIGHT_JOIN]
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
    select_expr, ...
    [FROM table_references
    [WHERE where_condition]
    [GROUP BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]]
    [HAVING where_condition]
    [ORDER BY {col_name | expr | position}
      [ASC | DESC], ...]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]
    [PROCEDURE procedure_name(argument_list)]
    [INTO OUTFILE 'file_name' export_options
      | INTO DUMPFILE 'file_name'
      | INTO @var_name [, @var_name]]
    [FOR UPDATE | LOCK IN SHARE MODE]]
}}

-CodeIgniterのモデルクラスの記述例

-- 結果が複数行のレコードの場合
result() または result_array()を使用

#code(php){{
function select_all($arg) {
  $this->load->database();
  $sql = 'SELECT * FROM `table_name` WHERE `column_name` = ?';
  $param = array($arg);
  $query = $this->db->query($sql, $param);
  return $query->result_array();
}
}}

-- 結果が一行のレコードの場合
row() または row_array()を使用

#code(php){{
function select_one($arg) {
  $this->load->database();
  $sql = 'SELECT * FROM `table_name` WHERE `column_name` = ?';
  $param = array($arg);
  $query = $this->db->query($sql, $param);
  return $query->row_array();
}
}}

http://codeigniter.jp/user_guide_ja/database/results.html
>$query->num_rows()
クエリで返された行数を取得します。

#code(php){{
$query = $this->db->query('SELECT * FROM my_table');
echo $query->num_rows();
}}

** Update [#gb418be0]
-MySQL UPDATE 構文
http://dev.mysql.com/doc/refman/5.1/ja/update.html

>単一テーブル構文には、UPDATE ステートメントは新しい値を利用して tbl_name 内に既存行のカラムを更新します。
SET 条項は、どのカラムを変更し、それらにはどの値が与えられるべきかという事を指示します。
もし WHERE 条項が与えられたら、それはどの行を更新するべきかを決定します。WHERE 条項が無ければ、全ての行が更新されます。
もし ORDER BY 条項が指定されると、指定された順に行が更新されます。
LIMIT 条項は、更新できる行数に制限を設定します。

#code(sql){{
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
    SET col_name1=expr1 [, col_name2=expr2 ...]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
}}

-CodeIgniterのモデルクラスの記述例

#code(php){{
function update($arg, $where) {
  $this->load->database();
  $sql = 'UPDATE `table_name` SET
      `column_name1` = ? ,
      `column_name2` = ? ,
      `column_name3` = ?
    WHERE
      `column_name4` = ?';
  $param = array($arg[1], $arg[2], $arg[3], $where);
  $this->db->query($sql, $param);
  return $this->db->affected_rows();
}
}}

ユニークな値なら「UPDATE IGNORE」にする。

http://codeigniter.jp/user_guide_ja/database/helpers.html
>$this->db->affected_rows()
「書き込み」タイプのクエリ (insert、update、など) が実行されたとき、処理された行の数を取得します。

** Delete [#zd1865ad]
MySQL DELETE 構文
http://dev.mysql.com/doc/refman/5.1/ja/delete.html

>単一テーブル構文に対しては、DELETE ステートメントが tbl_name から行を削除し、削除された行数を返します。
もし WHERE 条項が与えられたら、それはどの行を削除するべきかを決定します。
WHERE 条項が無ければ、全ての行が削除されます。
もし ORDER BY 条項が指定されると、指定された順に行が削除されます。
LIMIT 条項は、削除できる行数に制限を設定します。

#code(sql){{
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
}}

#code(php){{
function delete($arg) {
  $this->load->database();
  $sql = 'DELETE FROM `table_name` WHERE `column_name` = ?';
  $param = array($arg);
  $this->db->query($sql, $param);
  return $this->db->affected_rows();
}
}}

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS