「MySQL」を含む日記 RSS

はてなキーワード: MySQLとは

2019-04-19

老人共がワークフローを決めるなんて無理

PHPMYSQLを使ったワークフロー必要だとしても

その仕組み自体本来エラーい奴らが作らなきゃいけないわけです。

誰に承認させて誰に権限を与えて~みたいな感じ。

でもエラーい奴らは大体がコンピューターの事が分からないチンプンカンプンな老人ばかりで

「いいから俺の脳内にあるような仕組みを自動化させろや」の一点張りだったりするのです。

おわり。

旦那主夫になって思うこと

旦那精神的に働けなくなった。

無神経でタフな人だと思っていたけど、半年ほどであれよあれよと無職になった。



で、私が働きだした。

プログラマーSEとして雇われた。

基本的受託案件を社内開発。

暇な時期は、社外。

言語はその時によってPHPjavapython.NET

簡単WEBデザインなんかも。

DBmysql、postgres、oracle

サーバlinux

現場エンジニアとしての業務だけではなく、SEとして客の前にも立つ。

会社からSEとして期待されている。

でも本当はパソコンの前でぱちぱちやってるのが性に合っている。

要件定義とか言う御用聞きはマジで嫌。

電話が鳴るたびにビクビクしてる。

ストレスすごい。

社外は楽。

プロパー人達が御用聞きやってくれるから

できればずっと社外にいたい。

これで年収は450万くらい。

旦那と3人の子供を扶養している。


旦那は自宅からちょっと離れた場所にあるコンビニパート

月6万くらい。

あとは主夫業


将来、旦那正社員として働くのは無理っぽい。


まり私が大黒柱となった訳だ。

ハッキリ言ってプレッシャーを感じている。

将来への漠然とした不安というのだろうか。


これが予想以上に重いのだ…。


しかもあと20年以上、働かなきゃいけない…。


パソコンの前でぱちぱちやるだけならまだいい。

でも経験を積めば積むほど、客の前に出される。

嫌だ…。

むりぃ…。

たすけてぇ…。

でも私が働けなくなったら家庭は崩壊する。

辞めたくても、辞められない。

逃げたくても、逃げられない

すげー絶望感…。




旦那もこんな気持ちだったんだろうか…?


旦那はあまり家庭のことをやってくれなかった。

私は私で、子育て家事パートでテンパってた。

私は旦那にネチネチと文句を言っていた。


だけどその裏で旦那は、このプレッシャーに耐えていたんだなよな…。


男は外で働くだけ。気楽でいいよな。

なんて思ってた。

もちろん独身なら、気楽だと思う。

最悪でも、困るのは自分だけだから

でも家族ができたら、全員の人生を背負うことになるだよね…。

どんなに嫌なことがあっても逃げ出せない。

レールの上から振り落とされないよう耐えて、耐えて、耐え忍ぶしかない。

耐えきれなくなった時は、家族が路頭に迷う時。


重すぎだろ…_| ̄|○


でも世のサラリーマンは、みんなこの重さに耐えているんだよね…?

すげーよ

でも狂ってるよこんな世の中。


追記

愚痴でしたが、読んでくれてありがとう

実は3人目が生まれからマイホームの購入を検討したことがある。

マンション内覧に行ったり、住宅展示場に行ったり。

私は買う気満々。

でも旦那テンション低め。

結構いい条件のマンションがあったのに煮え切らない態度。

どうするの?買うの?やめるの?

問い詰める私に、結論をはぐらかす旦那

アナタはいだって大事な時に何も決めてくれない!

子供だって産むって決めたのはいつも私だった!


そんなことを旦那に言ってしまった。

2人目ができた時。

あの時も旦那は煮え切らなかった。

産むのか、おろすのか。

離婚してでも産むと、結論を出したのは私だった。


3人目はどうしても作りたがらなかったが、旦那が酔った隙にできた。

でも今は旦那気持ちがよく分かる…。

何か1つ持つたびに、責任は重くなり、逃げ道が無くなっていく。

旦那はそんな地獄にたどり着くのを分かったうえで、淡々と受け入れてくれてたんだなと。

たった一人で、この重さと戦ってくれてたんだなと。

それが巡り巡って、今自分に回ってきたんだなと。


正直、3人も産んだのを後悔している。

親として最低だと思う。

考えちゃダメなこと。

でも考えれば考えるほど、後悔という結論に行きつく。

2019-04-18

ライバルを買収して腐らせるといえば

Adobe

Oracle(MySQL)

Oracle(Java)←New!

他は?

2019-04-14

しがないサラリーマンが本気でエロサイトを作る

プログラミング趣味のしがないサラリーマン事務職)が本気でエロサイトを作ってみました。

本職ではないし、出来はイマイチかもしれないが、プログラミングに興味ある人の参考になればと思って書きます

私のプログラミング歴は10年ちょいです。

プログラミングを本職にしたこともないし、しようと思ったこともなく、面白そうだなと思ったことを時間をかけて、一人でコツコツと勉強しながら作ってきました。

これまでの成果は、Webサービスで5つ(ジャンルを変えて作ったものがいくつもある)、iPhoneアプリが3つ。

それでお金になったのはiPhoneアプリのです。これは結構儲かって、○百万ぐらいは稼いだと思います収益化は広告クリックのみです。

他はサーバー代+月一回焼き肉行けるかな?ぐらいのもんです。

割に合っているか言われれば、普通に会社仕事がんばって残業代もらって、パフォーマンス上げて出世したほうがよっぽど効率がいいです。

最近プログラミング教室みたいなのが流行っていますが、プログラミングするだけではまったく稼げません。儲かるのは教室だけかなと思います

Webサービスアプリをヒットさせられる人は、プログラミングよりも営業能力が高い人なんではなかろうかと思っています

私がこれまでに使った言語PHPRubyActionScriptObjective-cこんなところです。

プロでやっていくわけでなければ、時間をかけてもいいわけですし、自分が作りたいものが作れる言語選択すればいいと思います

私はほとんどがPHPです。Rails流行ってRuby勉強しましたが、結局PHPに戻ってしまいました。

使い慣れてるのもありますが、Rubyじゃないと出来ないことを特に感じなかったためです。

私にとっては言語なんてそんな程度のものです。

ただ、新規iPhoneアプリを作ろうとされている方がいれば、絶対swiftを勧めますObjective-cは辛かったです。本当に、、、

さて本題ですが、なんでエロサイトを作ろうと思ったかというと単純に集客力が高いと思ったからです。

だってビデオデッキインターネットの普及もエロの力が大きいですよ。

最近まりWebサービスを作れていなくて、せっかく作るなら人を集めたいな〜と。作って誰も見に来ないのって寂しいじゃないですか。

今回のエロサイト定番PHP+MySQL作りました

使い慣れてるし、情報も溢れてるし、ここは特に悩みませんでした。

プログラミングを始めようとされている方は、まずはこの組み合わせでいいんではないかと思います

Ruby環境作りをがんばって挫折するぐらいなら、レンタルサーバーでサクッと始めるのがよいと個人的には思います

エロサイトを作るにあたり気をつけた点は2つ。

UIを含めて検索性の高い使い勝手がいいものにすることと、合法ものにすること。

エロサイトはいろんな種類があるが、私が作ったもの簡単に言うと無料動画へのリンク集

このリンクにいろんな情報を付加して、ユーザーが見たい動画を探せるようにすることを第一に考えた。

複数巡回ロボット作成し、性癖等のジャンルAV女優情報等を収集し、無料動画タイトルマッチングさせることで、パッと見てその動画にどの女優が出ていて、配信元はどこで、どんなジャンルで、バストサイズがいくつなのかなどがわかるようにタグ付けを行った。

人ではなくロボット情報を集めるとなると当然違法ものが入ってくる可能性がある。そのために、画像にはモザイクをかける。サイト内では再生させない。こととした。

要はサイト内ではただリンクが貼られてるだけの状態にしている。

Google検索してエロ画像エロ動画へのリンクがいっぱい出てくるのとなんら変わらない状態

エロサイトとしてはここは思いっきり弱み。

だけどリスクを犯すところでもないし、こればっかりはしょうがない。

作成にあたって競合となるであろうサイト研究したけど、大半のサイト違法ものが少なからず写り込んでいる状態でした。

ちょっとぐらい写り込んでも大丈夫なのかもしれません。。。私が心配しすぎなだけで。

そんなこんなで作ったサイトが以下の「AVスクランブル」です。

https://avscramble.com/

作成期間は約1ヶ月です。

どんなサイトにしようかと構想を練るのに2週間かけたので、実際のプログラミングは2週間ですね。

デザインCSSのみでよく言えばシンプル、悪く言えば手抜き(笑)

久々のプログラミング疲れたので、少し休憩してから、ボチボチ改良していきます

2019-04-10

研究者になりたい人生だった

マルチプレクサをハフマン符号FFTするとプリアンブルに引っかかるので動的計画法で共起を二分探索したらO(nlogn)でラスタライズできたんだよね。でもMySQLユニバーサルメルカトル図法の座標からシャーディングすれば特異点暗渠に入るので注意が必要なんだよね。

俺はそこで諦めた。

2019-03-24

anond:20190324094739

SQLアンチパターンではないが、デッドロックについても投げっぱなしのあのSELECT FOR UPDATEの説明はなんなのかね。

1回のトランザクションでupdateを2回発行する場合と1回のSQL複数行のアップデートをする時はデッドロックリスク考慮するってだけで、かなり初心者にはありがたいと思うんだけどね。

1回のトランザクション複数回update文を投げるケース

tA =# begin;
tA =# update t1 set column = value where id = 1;

tB =# begin;
tB =# update t1 set column = value where id = 2;

tA =# update t1 set column = value where id = 2;
tB =# update t1 set column = value where id = 1;
tB =# ERROR:  デッドロックを検出しました

1回のSQL複数行のアップデート文を発行するケース

tA =# begin;
tA =# update t1 set column = value where id = 1;

tB =# begin;
tB =# update t1 set column = value -- update all record

tA =# update t1 set column = value where id = 2;
tA =# ERROR:  デッドロックを検出しました

あと、先勝ち後負けを実現するのはSELECT FOR UPDATEではなく楽観的ロックな。

tA =# begin;
tA =# select updated_at from t1 where id = 1;
         updated_at         
----------------------------
 2019-03-24 06:17:37.952893

tB =# begin;
tB =# select updated_at from t1 where id = 1;
         updated_at         
----------------------------
 2019-03-24 06:17:37.952893

tA =# update t1 set column = column - 1 where id = 1 and update_at = '2019-03-24 06:17:37.952893' and column > 0;
UPDATE 1
tB =# update t1 set column = column - 1 where id = 1 and update_at = '2019-03-24 06:17:37.952893' and column > 0;
UPDATE 0

MySQL存在しないレコード更新しようとするとギャップロックになるから注意な。

2019-03-01

anond:20190301143222

「このイメージで動かせばええで^^」の環境が作れたらほぼその時点でゴールなんだよ。

実際はmysqlだったりpostgreだったりのデフォルトに近いイメージを動かしたうえでなんやかんやしてるんだからほぼVMとやってること変わっておらん。

さらに大体本番マシンとの諸々のバージョンは揃えないことの方が多いから後で事故も発生するっていう。

ちゃんコンテナメンテナンスするんだなんて人がいなければ

コンテナ型でもVM型でも開発効率は一切上がらん。

2019-02-09

最近ちょくちょくSQL勉強しとる若造おっさん)です。

正直これってなにに役立つの

DBMSに、ってのは大前提として、これってどういうふうに運用すんの?

MySQLとか起動の仕方もよくわからんのだけど、

なんでこういうのってサーバー適用されてんの?

いや、企業用としては十分すぎるほどわかるんだけど、

個人でこういうの使用するってなくね?

やっぱり表計算ソフトDBMSソフトの違いがよくわからないおっさん若造からは以上です。

2019-01-17

MySQLってどういうとこで使ってるの?

SQLiteしか使ったことない

2019-01-12

anond:20190112223502

「基幹システム」とかいうもんがこの世界にどれだけあって、それに携わるエンジニアが何人いるんだよって事じゃね。

それ以外の凡百のエンジニアはポスグレとMysqlで事足りるんだからORACLE多数派にとって現実的選択肢ではないし(主にお金問題)、少数派で影が薄くて当然。

とはいえORACLEDBは強い

なんか最近影が薄くて存在感がない

擁護したくもないけど結構選択肢がコレしかないので最近の流れに違和感がある。

ポスグレやMySQLが「基幹システム」に耐えれるレベルではないんだよね※それ以外なら十分だと思う

なんか一部の範囲しか見でないのにORACLEは大したことないって意見違和感があるというグチでした

2018-12-18

(PHP) phpMyAdminのセキュリティー

アドバイスどうもありがとうございます

https://anond.hatelabo.jp/20181218231219

本番サーバには入れないでね

phpMyAdminセキュリティーって、過去の事例を見ると、あまり高くないようですね?

この手の管理ツールセキュリティ侵害を受けた場合ダメージが大きいので、インターネットからアクセスできないようにしておくのが基本です。特にphpMyAdmin過去に致命的な脆弱性が何度も発見されており、インターネットさらして利用するには向いていません。任意コード実行可能脆弱性の事例もあり、DB以外にもリスクがあります

 

内部ネットワークからしかアクセス出来ないようにしておきましょう。レンタルサーバのようなインターネット孤立したサーバであっても、VPNの経路を作りそちらからしかアクセス出来ないようにしておくようにした方がよいでしょう。

 

IPアドレスによる制限は次善策です。アクセス元のIPアドレスが固定されており他人と共有していないならそれなりに安全になります

 

URLによる隠蔽は外部から攻撃可能な既知の脆弱性スキャンするようなカジュアルアタック避け程度にはなりますが、URLは何かと漏洩するものですので、一般セキュリティ手法と見なされていません。

 

アクセス制限をした場合でも、認証は必ず設定する必要があります。例えばCSRFのような攻撃にはアクセス制限無意味です。

 

phpMyAdmin認証HTTP認証のどちらを使う方がよいかは使ったことがないのでわかりませんが、HTTP認証場合BASICではなくダイジェスト認証にしてください。BASIC認証は(ほぼ)生で認証情報が流れますので使ってはいけません。(ブラウザで人が操作する場合以外にはBASIC認証を使わざるを得ない場合もあります

対応

  1. phpMyAdminローカルの開発サーバーで使う。
  2. 本番サーバーのMySQLメンテナンスときだけ、Adminer.php等を使う。(使用前にコピーして、使用後は削除する) もしくはMySQLコマンド操作する。

こんなかんじでしょうか?

[][][] phpMyAdminの手動インストール

WebサーバーPHPを5.4から7.2に上げました。

phpMyAdminも入れ替えました。

 

環境CentOSNginxPHP7.2 + MySQL

yumコマンドphpMyAdminをインストールしたら、エラーメッセージが出て、インストールできませんでした。

リポジトリで用意されているパッケージが古いのか?何度かやり直しても、yumインストールできませんでした。

 

手抜きを諦めて、手動でインストールすることにしました。

phpMyAdmin インストール コンパイル Nginx」等のキーワードGoogle検索すると、やり方を解説している記事がたくさんヒットしました。

参考

 

手順

  1. WebサーバーSSHリモートログインする。
  2. phpMyAdminの最新版wgetダウンロードする。
  3. ZIPファイルを展開して、フォルダ名を「phpmyadmin」にリネームする。
  4. /usr/share/phpmyadmin にコピーする。
  5. phpMyAdmin用に、Nginx設定ファイルを追加する。
  6. PHP7のセッションフォルダ確認しておく。
    1. PHP関係設定ファイルphp.ini」や、PHP-FPM設定ファイルwww.conf」の中を確認しておく。
    2. session.save_path = "/var/lib/php/session" という記述有効にする。(コメントアウトされていたら、アンコメントしておく)
  7. Nginx設定ファイルテストして、問題なければ再起動する。
    1. $ service nginx configtest
    2. $ service nginx restart
  8. WebブラウザーでphpMyAdminにアクセスしてみる。
  9. phpMyAdminが無事に開いたら、インストール成功!!!

 

まとめ

phpMyAdminは手動でインストールしても、すごく簡単でした。

将来的にバージョンアップすることも考えると、「/usr/share/phpmyadmin」へ直にコピーするのではなく、他の場所コピーして、「/usr/share/phpmyadmin」はシンボリックリンクにしておけばいいかも。

(今回は面倒なので直接コピーしました。)

[][] Adminer.phpでお手軽にMySQL管理

ちょっとだけGUIMySQLをいじりたいというときに「Adminer」が便利です。

phpMyAdmin」がサーバーに入ってない場合に重宝します。

2018-12-12

anond:20181212190058

MySQL無料やぞ

もしくはWEB DB を入れる

access 買うよりはたぶん安い

2018-12-11

月収30万円+ボーナス2回が欲しい

増田では年収高い人が多いので羨ましくなっている現在絶望の30台前半の男です。

そして非正規雇用です。高卒です。

pc(windows)のユーザーサポート業務ばかりやってきました。

pcキッティングや初期セットアップは得意です。

プログラミングはできません。

(phpMySQL大分昔に触れただけです)

HTMLCSSちょっとだけ。wordpressちょっと使える程度です。

サーバードメインコントローラーやらwsusやらがなんちゃってレベルです。

windows10の大型アップデート動作検証などやっています

動画編集aviutlで少しできるくらいです。

ざっくり書きました。

こんなんですが現在地方年収260万円です。

転職したら収入が上がったなどと景気のいい話を聞きますが、私のような人材では難しいと思っています

関東ではそんなに仕事があるのでしょうか。

率直な感想を聞きたいです。

2018-12-01

最初から完璧を目指すから着手できない罠

最初はβ版と割り切って、適当に作ればいい。

WebサービスなんてPHPMySQL簡単に作れる。

流行ったら、改善はその後でもいい。(利益が出るなら外注してもいい)

2018-11-25

Django+mysqlデプロイするのに一番簡単サーバーサービスを教えてくり〜

さくらVPSなのか

herokuはporstage何ちゃらでdjango-mysql使えないかパス

2018-11-19

増田プログラマー養成講座 その22 データベース設計 概念物理

前回は、DB設計の(1)要件定義を学びました。

今回は、DB設計の(2)概念設計、(3)論理設計、(4)物理設計を見てみましょう。

 

DB設計の流れ

  1. 要件定義
  2. 概念設計
  3. 論理設計
  4. 物理設計

 

DB設計の教材

データベース解説本やWeb記事を調べてみた。

  1. 本「スッキリわかるSQL入門」 第12章 テーブル設計 https://book.impress.co.jp/books/1111101167
  2. Web記事「できるエンジニアになるためのちょい上DB術」 https://www.edifist.co.jp/lecture/dbdesign/

 

スッキリわかるSQL入門」のDB設計説明コンパクトにまとまっていて、分かりやすいと思いました。(是非一度読んでみてください。)

 

 

 

概念設計論理設計物理設計概要

スッキリわかるSQL入門」第12章の説明(p.374)を参考にしてみよう。(詳しくは本を読んでみてください。)

 

概念設計

管理すべき情報はどのようなものなのかを整理します。

データベースシステムに関することは考えず、要件に登場する情報だけをザックリと把握します。

たとえば、家計簿データベースであれば、扱うべき情報として「利用者情報」や「入出金情報」などがあることを明確にします。

また、情報間で関連がある場合、どのような関係があるかも併せて整理します。

 

論理設計

概念設計で明らかになった各情報について、RDBを使う前提で構造を整理し詳しく具体化していきます

論理設計では「どのようなテーブルを作り、それぞれのテーブルにどのような列を作るか」まで明らかにすれば十分です。

型や制約など、付随的な部分については考えません。

 

物理設計

特定DBMS製品(たとえばMySQL)を使う前提に立ち、論理設計で明らかになった各テーブルについて、その内容を詳しく具体化していきます

すべてのテーブルのすべての列について、型、インデックス、制約、デフォルト値など、テーブル作成必要なすべての要素を確定させます

この物理設計に基づいて、CREATE TABLE文などを含む一連のDDL文を作成し、最終的にデータベース内にテーブル作成することができます

 

本書の「図12-4 データベース構築のおおまかな流れ」も参考にして欲しい。

入力 お客様要件(全国の倉庫商品があって、その在庫管理したいんだけど~)

 

 

●処理 DB設計作業

 ・概念設計:(商品)(在庫)(倉庫) …ER図を作成

 ・論理設計:[商品][在庫][倉庫]    …正規化

 ・物理設計:[SHOHIN][ZAIKO][SOUKO]  …使うDB仕様に合わせてテーブル定義表を作成

 

 

●出力 DDL

 ・CREATE TABLE

 ・CREATE VIEW

 ・CREATE INDEX

 

 

 

(2) 概念設計

 

ER図とは?

ER図とは、「Entity-relationship Diagram」(実体関連図)の省略形だ。

 

ER図の用語

コンピューター用語英語ばっかりだから日本語にして欲しいよねw

 

ER図の書き方
  1. エンティティ―」は四角い箱で書く。
  2. 箱の中にエンティティ―の詳細な中身=「アトリビュート」を書く。
  3. 箱と箱を「リレーション」の線でつなぐ。
  4. 線の両端に「カーディナリティー」「オプショナリティー」の記号を書く。

 

ER図で使う記号は、「IE記法」や「IDEF1X記法」など、いろいろな規格がある。

情報処理技術者試験のデータベーススペシャリストの問題では、「UML」という図の記法も使われる。

 

 

 

(3) 論理設計

 

正規化とは?

正規化 Normalization」とは、データの形を「正規形」(Normal form)に変えること。

ざっくり言うと、テーブル(表)を分割して、データの重複や不整合を解消する作業だ。

 

テーブルの形を変えていくステップには、第1~第5まで5段階ある。

  1. 第1正規
  2. 第2正規
  3. 第3正規
  4. 第4正規
  5. 第5正規

それぞれの変形方法について理解しておこう。

実務では第3正規形まで正規化できればとりあえずOK

 

第3.5正規形(ボイス-コッド正規形)

第3正規形をより厳密にした「ボイス-コッド正規形」という形もある。

第3と第4の間なので「第3.5正規形」とも呼ばれている。

(ボイス-コッド形もカウントに入れたら、第1~第5、+第3.5で計6段階になる。)

 

非正規

正規化を進めると、SQLJOIN」の利用が増えてくる。JOINを多用する処理は遅い=DBの性能低下につながる。

第3正規形まで分割しても、実際に使ってみて遅い場合は、第2正規形や第1正規形に戻して使うこともある。これを「非正規化」とか「正規化を崩す」などという。

 

RDBでは処理速度が遅くなる場合、代わりに「NoSQL」を使う場合もある。

 

 

 

(4) 物理設計

 

時間がない場合、先にGUIDB管理ツールでデータベース作成してしまい、その後でテーブル定義表を作成することもある。

 

DB設計に慣れてきたら上記の各段階はすっ飛ばして、いきなりデータベースを作れるようになるだろう。

 

ここまで、SQLの使い方やデータベース設計について学びました。

次回は、その他のSQLに関連する話も見てみよう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベース参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新

anond:20181110182445 増田プログラマー養成講座 その20 SQLデータの削除

anond:20181111205255 増田プログラマー養成講座 その21 データベース設計 (1)要件定義

anond:20181119224031 増田プログラマー養成講座 その22 データベース設計 概念物理 ←★今ここ★

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

SSDって書き換え可能回数がせいぜい1万回くらいらしいけど

例えばMySQL特定カラム書き換えるような処理を延々やってたらその内寿命ちゃうんかね。試した奴おる?

2018-11-10

増田プログラマー養成講座 その20 SQLデータの削除

前回は、SQLデータ更新をやりました。

今回は、SQLデータの削除をやりましょう。

 

メッセージの削除

基本は、同じなので前回やった更新処理をちょっと変えれば削除もすぐできます

 

投稿されたメッセージを削除する機能を、Webページに付けてみよう。

 

削除ページにジャンプするリンク

前々回作ったメッセージの一覧の中に、削除ページにジャンプするリンクも入れておいた。

<td><a href="welcome/delete/<?php echo $item['id']; ?>">削除</a></td>

という1行が削除ページにジャンプするためのリンクになる。

ブラウザーHTMLソースを見ると、ここが以下のようなHTMLに書き換わってる。

<td><a href="welcome/delete/2">削除</a></td>

これは「メッセージID番号が2のメッセージ」を削除対象にして、削除ページにジャンプする。

 

Controllerの改造

ユーザーが「http://localhost/waf/welcome/delete/2」というURLで、削除ページにアクセスしたら、コントローラーで「2」を受け取って使いたい。

CodeIgniterでは、URL文字列を解析して、使うことができる。

以下のようにコントローラーを改造してみよう。

 

// 削除画面

public function delete($id = '')

{

 echo "ID=".$id;

 $this->load->view('chat_delete');

}

 

Controllerの改造の解説

delete()メソッド引数で、URL中の「2」の部分を受け取れる。

これは前回の編集ページ(更新の処理)と同じ。

「$id = $this->uri->segment(3);」でも受け取れる。

 

Viewの改造

削除ページでは、確認する質問を入れてみよう。

ユーザーに「本当に削除しますか?」みたいな注意喚起をしておきたい。

 

ファイルの内容を以下のように編集する。

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>削除</h2>

  <p>以下のメッセージを削除しますか?</p>

  <form action="welcome/delete" method="post" accept-charset="utf-8">

   <?php if (isset($talk)): ?>

   <p style="background-color:lightpink"><?php echo $talk['message']; ?></p>

   <input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

   <input type="hidden" name="action" value="delete">

   <?php else: ?>

   <p>※該当するメッセージがありません。(または削除済です。)</p>

   <?php endif;?>

   <button>削除する</button>

  </form>

  <p><a href="welcome/index">戻る</a></p>

 </body>

</html>

 

Viewの改造の解説

<p style="background-color:lightpink"><?php echo $talk['message']; ?></p>

削除するメッセージを色付きで強調して、ユーザー確認してもらう。

 

<input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

コントローラー削除対象メッセージID番号を送るため、inputタグの「type="hidden"」でメッセージID番号を仕込んでおく。

 

Controllerの改造

ファイルの内容を以下のように編集する。

// 削除画面

public function delete($id = '')

{

 $id = $id ? $id : $this->input->post('id');

 $action = $this->input->post('action');

 if ($action == 'delete') {

  $this->chat_model->delete_message($id);

 }

 $data['talk'] = $this->chat_model->read_message_by_id($id);

 $this->load->view('chat_delete', $data);

}

 

Controllerの改造の解説

やってることは、前回のデータ更新場合とほぼ同じ。

$this->chat_model->delete_message($id);

で、モデルに用意したデータ削除用メソッドを呼び出しているだけ。

次は、モデルdelete_message()メソッドを用意しよう。

 

Modelの改造

ファイルの内容を以下のように編集する。

// Delete

public function delete_message($id = 0)

{

 $sql = "DELETE FROM talk WHERE id = ?";

 $param = array($id);

 $this->db->query($sql, $param);

 return $this->db->affected_rows();

}

 

Modelの改造の解説

SQLの「DELETE」を使えば、指定したレコード(1件分のデータ)を削除できる。

DELETE FROM talk WHERE id = ?」で、talkテーブルmessageid指定して削除している。

 

データを削除した後の挙動は、メッセージID番号がなくなるので、削除ページに表示できるメッセージデータがなくなる。

(例)id=2のデータを削除したら、SQLで「SELECT * FROM talk WHERE id = 2」を取得しても、空のデータデータがない状態

その場合は、

<p>※該当するメッセージがありません。(または削除済です。)</p>

と表示させてる。

 

まとめ

以上で、SQLの「DELETE」を使ったデータの削除ができた。

長々と説明したが、今回の大事な点は、SQLの「DELETE」の使い方だ。

 

以上で、MVCフレームワークを使ったOOPの使い方とSQLの使い方を見てきた。

SQLSQLだけで説明したほうが良かったね!MVCフレームワーク説明SQL説明が混在すると要点が分かりづらくなる?)

ちょっと失敗だったかも。m(__)m)

 

次回は、データベースの設計について学んでみよう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベースの参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新

anond:20181110182445 増田プログラマー養成講座 その20 SQLデータの削除 ←★今ここ★

anond:20181111205255 増田プログラマー養成講座 その21 データベース設計 (1)要件定義

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

増田プログラマー養成講座 その19 SQLデータ更新

前回は、Webアプリの骨組み(スケルトン)に、SQLデータの追加と取得をやりました。

今回は、SQLデータ更新をやりましょう。

 

メッセージ更新

 

編集ページにジャンプするリンク

前回作ったメッセージ一覧に、[編集]のリンクも入れておいた。

<td><a href="welcome/update/<?php echo $item['id']; ?>">編集</a></td>

という1行の部分。

[編集]をクリックすると、編集用ページにジャンプする。

ブラウザーHTMLソースを見ると、以下のようなHTMLになってるはず。

<td><a href="welcome/update/2">編集</a></td>

これは「メッセージID番号が2」を対象にして、編集ページにジャンプすることを意味する。

 

Controllerの改造

編集用ページのコントローラーを作ろう。

「http://localhost/waf/welcome/update/2」というURL編集ページにアクセスしたら、メッセージID番号の「2」を受け取れるようにしたい。

URL文字列を処理して「2」を取り出せるようにしよう。

 

// 更新画面

public function update($id = '')

{

 echo "ID=".$id;

 $this->load->view('chat_update');

}

 

CodeIgniterでは、URLから文字列を取り出す方法がいくつか用意されている。

  1. 「update($id = '')」のようにメソッド引数「$id」を用意すれば、「2」の部分を取り出せる。
  2. 引数を使う以外の方法も用意されていて、「$id = $this->uri->segment(3);」のように書けば、「2」の部分を取り出せる。

// 更新画面

public function update()

{

 $id = $this->uri->segment(3);

 echo "<hr> ID=".$id;

 $this->load->view('chat_update');

}

 

Controllerの改造の解説

CodeIgniterで、URL文字列から特定部分の文字列を取り出す方法を見ておこう。

 

例えば、「http://localhost/waf/welcome/update/aaa/bbb/ccc」というURLアクセスしたときCodeIgniterではURL中の「aaa」「bbb」「ccc」という部分は、以下のようにして取り出せる。

$seg1 = $this->uri->segment(1); // → 1番目のURL文字列:「welcome」=コントローラークラス

$seg2 = $this->uri->segment(2); // → 2番目のURL文字列:「update」=クラスの中のメソッド

$seg3 = $this->uri->segment(3); // → 3番目のURL文字列:「aaa」の部分

$seg4 = $this->uri->segment(4); // → 4番目のURL文字列:「bbb」の部分

$seg5 = $this->uri->segment(5); // → 5番目のURL文字列:「ccc」の部分

URLを「/」で区切って、base_url(http://localhost/waf/)の次から順番に、1番目のURL文字列、2番目のURL文字列、3番目のURL文字列、…とsegment()メソッドで順番を指定すれば取得できる。

 

Modelの改造

データベースでメッセージID指定して、メッセージを取り出す機能を用意しよう。

 

ファイルに以下のメソッドを追加する。

// Read by Id

public function read_message_by_id($id = 0)

{

 $sql = "SELECT * FROM talk WHERE id = ?";

 $param = array($id);

 $query = $this->db->query($sql, $param);

 return $query->row_array();

}

 

Modelの改造の解説

SQLの「WHERE」句で、絞り込む条件を指定できる。

 

SELECT * FROM talk WHERE id = ?

「WHERE id = 2」とすれば、メッセージID番号が2のメッセージデータが「talkテーブルから取り出せる。

もし該当するデータがなければ、返されるデータは空になる。(データが返ってこない。)

 

CodeIgniterの「row_array()」は、1件分のデータ配列の形にして返すメソッドだ。

 

Viewの改造

ファイルの内容を以下のように編集する。

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>編集</h2>

  <p>メッセージを変更して「更新する」ボタンを押してください。</p>

  <form action="welcome/update" method="post" accept-charset="utf-8">

   <label>メッセージ</label>

   <?php if (isset($talk)): ?>

   <input type="text" name="message" value="<?php echo $talk['message']; ?>">

   <input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

   <input type="hidden" name="action" value="update">

   <?php else: ?>

   <p>※該当するメッセージがありません。</p>

   <?php endif;?>

   <button>更新する</button>

  </form>

  <p><a href="welcome/index">戻る</a></p>

 </body>

</html>

 

Viewの改造の解説

データベースから取り出した1件分のメッセージを表示する部分を追加した。

<input type="text" name="message" value="<?php echo $talk['message']; ?>">

の「<?php echo $talk['message']; ?>」という部分だ。

これで変更したいメッセージの本文を表示できる。

 

あと、編集したメッセージWebサーバーに送信できるように、Formタグ送信ボタン(「更新する」の部分)も追加した。

このときメッセージID番号も送信できるように、

<input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

という1行も仕込んである

 

Controllerの改造

ファイルの内容を以下のように編集する。

// 更新画面

public function update($id = '')

{

 $id = $id ? $id : $this->input->post('id'); // id -> segment or post

 $action = $this->input->post('action');

 if ($action == 'update') {

  $message = $this->input->post('message');

  $this->chat_model->update_message($id, $message);

 }

 $data['talk'] = $this->chat_model->read_message_by_id($id);

 $this->load->view('chat_update', $data);

}

 

Controllerの改造の解説

メッセージID番号を指定して、データベースから取り出し、Viewに渡すデータを用意している。

$data['talk'] = $this->chat_model->read_message_by_id($id);

 

ユーザーメッセージ編集をしてWebサーバーに送信したら、データ更新する指示を出す部分も追加した。

$action = $this->input->post('action');

if ($action == 'update') {

 $message = $this->input->post('message');

 $this->chat_model->update_message($id, $message);

}

モデルにupdate_message()メソッドを用意して、$idと$messageを渡せば、該当データ更新するようにしたい。

次は、モデルでupdate_message()メソッドを用意しよう。

 

Modelの改造

ファイルの内容を以下のように編集する。

// Update

public function update_message($id = 0, $message = '')

{

 $sql = "UPDATE talk SET message = ? WHERE id = ?";

 $param = array($message, $id);

 $this->db->query($sql, $param);

 return $this->db->affected_rows();

}

 

Modelの改造の解説

SQLの「UPDATE」を使えば、指定したレコード(1件分のデータ)を更新できる。

「UPDATE talk SET message = ? WHERE id = ?」で、talkテーブルmessageid指定して更新している。

 

CodeIgniterの「affected_rows()」メソッドは、更新した行数を返す。=成功なら1行、失敗なら0行となる。

 

補足

コントローラーの「$id = $id ? $id : $this->input->post('id');」という行は、$idの受け取り方が2パターンあるので、それに対応している。

編集ページの表示で、1回目の表示と、2回目以降の表示で、$idの受け渡し方が変わっている。

  • 1回目:URLに埋め込まれID番号をupdate($id = '')の引数$idで受け取っている。($this->uri->segment(3)で受け取るのと同じ)
  • 2回目以降:Formタグで送られてきた$idを$this->input->post('id')で受け取っている。

URLに埋め込む方法上記の1回目のような方法)は、ユーザー勝手に値をいじれるので、基本的には使わない方が良い。

 

まとめ

以上で、SQLの「UPDATE」を使った、データ更新ができた。

長々と説明したが、今回の大事な点は、SQLの「UPDATE」の使い方だ。

CodeIgniterの使い方や、Webサイトの作り方(FormタグなどのHTML知識)は、オマケ程度に見ておいて欲しい。

 

次回は、データを削除するSQLDELETE」の使い方を見てみよう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベースの参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新 ←★今ここ★

anond:20181110182445 増田プログラマー養成講座 その20 SQLデータの削除

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん