UPSERT処理のまとめ

今回はまとめです

※管理画面を作るときに必要な処理をまとめます。

 

■何をする

1.セレクト文で重複チェック

2.joinして更新

3.viewに表示

 

 

1.【重複】セレクト・カウント関数

2.【JOIN】テーブルを複数

3.【VIEW】で取り出す

4.【まとめ】迷ったらとりあえず作る主義

 

※コードイグナイター3.2を利用して書いています。

 

1. 2種類ある

・カウント関数

・セレクト文

 

■カウント関数

$query = $this->db->query('SELECT company_id FROM company_name_t WHERE company_id="$ci"');

//company_idがintなので、カウント関数で分岐処理
$this->db->where('company_id', $post_data_company);
$this->db->from('company_name_t');
$count = $this->db->count_all_results();

 

if ($count > 0) {

//重複してたら、更新

}else{

//重複してないなら、挿入

}

 

intの場合は使えます。

varcharだと使えないので注意が必要。

 

 

■セレクトして検証

$this->db->where('school_id', $post_data_school);
$query02 = $this->db->get('school_name_t');

if ($query02->num_rows() > 0){

//重複してたら、更新

}else{

//重複してないなら、挿入

}

 

varcharでも使える

 

■ポイント

$query02->num_rows() > 0と書いて、処理するのがポイント。

 

 

2.カラムを取り出す

■何をしたいか

複数テーブルから、必要なカラムを取り出す。

 

1.複数テーブルをjoinでつなぐ

2.必要なカラムを取り出す

 

■JOINする

public function get_school_data(){

 

$query=$this->db->query("
SELECT
company_t.company_id,company_name_t.company_name.....(欲しいテーブル+カラム)

FROM company_t

JOIN company_name_t
ON company_name_t.company_id=company_t.company_id


JOIN school_t

USING (company_id)


JOIN school_name_t
USING (school_id)

JOIN room_t
USING (room_id)

WHERE company_t.company_id

;");

return $query->result_array();

}

 

データの取得はモデルに書いておく。

 

① 関数名をつける get_company_school_dataなど

② $query=$this->db->query()でシンプルなクエリを作る

③ SELECTの後には、欲しいテーブル+カラムを並べる

④ return $query->result_array();

 

これでモデルが完成。

 

■補足

今回は、3つのテーブルを連結させています。

 

■USINGについて

USING (room_id)を使うと楽です。

今回は、後で勉強できるように、ON company_name_t.company_id=company_t.company_idと、細かく書いてあります。

 

■疑問点

UPDAEするときは、マスタテーブルのカラムをSELECETして、更新したらいいのか?

 

 

3.VIEWで引き取る

先ほど作った関数を受け取ります。

 

<?php $company_name=$this->zyuku_model->get_school_data(); ?>

<table class="table3">
<tbody>
<tr class="wh">
<td bgcolor="#40A697"><p>会社id</p></td>
<td bgcolor="#40A697"><p>会社名</p></td>
<td bgcolor="#40A697"><p>塾id</p></td>
<td bgcolor="#40A697"><p>塾名</p></td>
<td bgcolor="#40A697"><p>校舎・教室id</p></td>
<td bgcolor="#40A697"><p>校舎・教室名</p></td>
</tr><!--foreachはループさせたい場所に書く↓↓ -->
<?php foreach($company_name as $company_names): ?>
<tr>
<td><p><?php echo $company_names['company_id']; ?></p></td>
<td><p><?php echo $company_names['company_name']; ?></p></td>
<td><p><?php echo $company_names['school_id']; ?></p></td>
<td><p><?php echo $company_names['school_name']; ?></p></td>
<td><p><?php echo $company_names['room_id']; ?></p></td>
<td><p><?php echo $company_names['room_name']; ?></p></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>

 

 

①<?php $company_name=$this->zyuku_model->get_school_data(); ?>

作った関数を呼び出します。 配列で受け取っています。

 

<?php foreach($company_name as $company_names): ?>

ここで配列の中身を取り出します。

この書き方はPHPのお決まりですね。

 

③<?php echo $company_names['company_id']; ?>

ここで、配列のデータを個別に取得

 

<?php endforeach; ?>

ここでループさせたい場所を閉めます。

 

■ポイント

<?php $company_name=$this->zyuku_model->get_school_data(); ?>

<?php endforeach; ?>

ループの指定場所が大事です。

 

 

4.まとめ

upsertは管理画面で必要な処理になります。

ondupurikateでやろうとしましたが、MYSQLでしか、動かなかったりするので、採用を見合わせ。

カンタンにできる処理よりも、面倒な書き方をした方が、実力がつく。とよく分かりました。

 

迷ったら、面倒な方を選んでおけば、あとあと楽になります。

初心者は楽をしすぎない方がいいって事ですね。

 

業務設計に応じて、どこで分岐処理させるのか?が変わってくる。

1度作ってから、「あれ、これだとアカン」という事が多い(笑

 

 

mYSQLについて知ろう

外部結合、外部キー制約のあるテーブルへのupdateなどにはまりやすいです。

 

■ 設計について■

エンティティの抽出

正規化をしよう

UMLとは何か?

ER図を覚えよう

アンチパターンとは?

GitHubとは

 

■アンチパターン

論理削除

ジェイウォーク(交差テーブルを作らない)

1文字エイリアス

全部小文字

複数列属性(マルチカラムアトリビュート)

パスワード

フラグの闇

 

 

おすすめの本

MySQLを勉強する時に、おすすめの本です。

 

基礎からのMySQL 第3版 (基礎からシリーズ)

 

基本的な事が学べますので、ぜひ参考にしてみてください。

 

 

一緒に学習しましょう!!学習仲間を募集しています。

 

 

 

この記事を読んだ人は、こんな記事も読んでいます

 

SEO対策の基本 外部要因とは?

SEO対策の基本的である、外部要因とは何か?

SEO対策をするなら絶対に知っておきたい、基本知識です。

 

売れるサイトを作るのに知って起きたい知識

サーチエンジンマーケティングという言葉をご存知でしょうか?

ホームページで商品やサービスを売る時に知っておきたいマーケティング

についてご紹介いたします。

seo対策をするメリットとは

SEO対策をする5つのメリットとは?

なぜ上位表示させることが大事なのか?なぜSEO対策をする必要があるのか

についてご紹介させていただきます。

 

内部要因とは

SEO対策の内部要因とは?

上位表示させるためには、内部要因について知っておくことも大事です。

キーワードを上位表示させるために必要なのは、ソースコードを最適化することです

内部要因の対策について知りたい方はこちらへ

 

キーワード対策をするまえに

キーワード対策をする前に

そのキーワード対策。ちょっと待ってください。

そのまま対策をすると、必ずお金を損してしまいます。個人事業主や中小企業は

そんな大きなキーワードで対策をしてはいけません。

広告費用が高くなる理由とは

広告費用が高くなる本当の理由とは?

売れないサイトに集めていませんか?広告費用がかかるわりには

お問い合わせが少ない・・・と感じる方は多いはずです。

購入率の悪いサイトに集客をしている可能性があります。

 

 

 

 

【SEO対策・web広告・webコンサルティングのプラスワーク対応エリアについて】

プラスワークでは、東京、神奈川、千葉、埼玉を中心に全国でwebコンサルティング、SEO対策、ホームページの更新、ホームページのリニューアル運営代行をしております。売上アップをお考えならお気軽にご相談ください。

 

【SEO対策・web広告・webコンサルティングのプラスワーク 対応地域】

北海道 [ 北海道 ]

東北  [ 青森 | 岩手 | 山形 | 福島 | 秋田 | 宮城 ]

関東  [ 東京 | 埼玉 | 千葉 | 茨城 | 栃木 | 群馬 | 神奈川 ]

甲信越 [ 山梨 | 長野 | 新潟 ]

北陸  [ 石川 | 福井 | 富山 ]

東海  [ 愛知 | 静岡 | 岐阜 | 三重 ]

近畿  [ 大阪 | 兵庫 | 京都 | 滋賀 | 奈良 | 和歌山 ]

中国  [ 島根 | 山口 |鳥取 | 広島 | 岡山 ]

四国  [ 徳島 | 香川 | 愛媛 | 高知 ]

九州  [ 福岡 | 佐賀 | 長崎 | 熊本 | 大分 | 宮崎 | 鹿児島 ]

プラスワークでは全国でSEO対策、ホームページ更新、制作をしております。中小企業専門SEO対策・ホームページ更新制作会社、ダイレクト レスポンス マーケティング、ウェブ マーケティング、マーケティング 分析、口コミのよいSEO対策会社をお探しならプラスワークにお任せくださいませ。

 

 

【コンテンツ】

トップへ

更新レスキュー

料金について

制作実績

お客様の声

よくある質問

会社概要

お問い合わせ

【更新レスキュー】

ライトコース

ゴールドコース

プラチナコース

 

【その他】

ニュース

メルマガ登録

特別資料プレゼント

相互リンク募集中

【課題から探す】

ホームページの課題

SEO対策とは

SEO対策がダメな理由

上位表示されない理由

相互リンクとは

順位が落ちてしまう原因

 

 

フェイスブック  ツイッター