PHP講座(5)!
はじめてのMySQL
この授業では、PHPでWebアプリケーションを作成するにあたって切っても切れない関係にあ
るMySQLの基本とその操作方法について学びます。
Webアプリケーションの仕組み
10.4.18 (C) 株式会社破滅派
2
HTML+CSS+Javascriptなどで作る
Webページ。	
  
Flashなども含む。
すべてのWebアプリケーションは同じ仕組です
ユーザーインターフェース ビジネスロジック ミドルウェア
PHPやPerl、Rubyなどで作る処理命
令。ミドルウェアへの命令や、処理
結果の出力などを行う、アプリケー
ションの心臓部分。
MySQLのようなデータベース、
sendmailのようなメールサーバ、GD
のような画像処理アプリケーション
など。
ユーザーから	
  
のリクエスト
アプリケーション	
  
への命令
ユーザーへの
結果出力	
  
アプリケーション
による処理結果	
  
処理
処理
できなければいけないこと
10.4.18 (C) 株式会社破滅派
3
特に、データベース(DB)はとてもよく使います。
DBが できないと	
  
お話になりません。
ちょっとは
なぜデータベースが必要なの?
10.4.18 (C) 株式会社破滅派
4
データベース   データの保存・取り出し
Webアプリケーションの必要とするデータは	
  
膨大な量になるので、検索機能が必要。
データベースならではの4つの技術
10.4.18 (C) 株式会社破滅派
5
取得(検索)は圧倒的にたくさん使
う機能です。	
  
言い換えれば、検索さえちゃんとで
きれば、あとはそんなにやらなくて
もいいわけです。
1.  作成する(	
  Create)	
  
2.  検索・取得する(Retrieve)	
  
3.  更新する(Update)	
  
4.  削除する(Delete)	
  
全部あわせてCRUDとか
言ったりします。
RMDBSとは
10.4.18 (C) 株式会社破滅派
6
みなさんがこれから扱うDBとは、	
  
RDBMS(Relational	
  Database	
  Management	
  System)つまり、	
  
複数のデータを管理するシステムです。
たとえば…	
  
1.  顧客Aの9月の取引内容を「マイページ」に表示する	
  
2.  商品Bを購入した人数を表示する	
  
3.  20代の顧客が購入した商品のランキングを表示する	
  
顧客データ 取引データ商品データ
データベースの構造
10.4.18 (C) 株式会社破滅派
7
データベースはテーブル(表)の集合体です。
データベース
Excelも「シート」を束ねる「ブッ
ク」からなるため、似たような機
能を提供していますが、一番の違
いは複数のテーブルからの検索性
です。
テーブルの構造
10.4.18 (C) 株式会社破滅派
8
ID name age sex prefecture birthday
1 鈴木 20 0 東京 1990-­‐05-­‐05	
  14:00:00
2 佐藤 35 1 千葉 1975-­‐08-­‐22	
  22:02:00
3 田中 50 0 神奈川 1960-­‐12-­‐11	
  00:00:00
それぞれの項目(列)の名前をフィー
ルド名と呼びます。	
  
この場合は「ID」「name」などが
フィールド名です。	
  
各列のことは「カラム」と呼びます。
一行で一つのデータセットになります。	
  
この行のことをrowと英語表記するこ
とがあるので、注意してください。	
  
データを取得するときは普通、行ごと
になります。
その行をテーブル内で特定するフィールド
を主キーと呼びます。	
  
普通はIDをつけます。他とかぶらないよう
にすれば、「テーブルAのID5」とすること
で、特定のデータを取得できます。
MySQLの各フィールドにはデータ型があり
ます。日付ならDatetime型やTimestamp型
を利用することで、大小の比較などが簡単
になります。この場合、性別を0/1にするこ
とで、判断が容易になります。	
  
MySQLを使ってみての感想
10.4.18 (C) 株式会社破滅派
9
MySQL	
  
ムズ過ぎ	
  
オワタ	
  
\(^o^)/
もう講座	
  
でねーよ
テーブルの作成とphpMyAdminの利用
10.4.18 (C) 株式会社破滅派
10
MySQLを操作するにはコマンドライン環境を使いました。	
  
しかし、これだけでは大変です。	
  
phpMyAdminというWebブラウザからMySQLを操作できる
ツールを利用します。	
  
phpMyAdminはWebブラウザから操作で
きるため、MySQLを直感的に理解する
ことができます。	
  
XAMPPには最初からインストールされ
ていますし(http://localhost/xampp)、各
種レンタルサーバにも入っています。	
  
基本的にテーブル作成はphpMyAdminか
ら行いましょう。	
  
あきらめるな!
WordPressにみるRDBMSの構造(1)
10.4.18 (C) 株式会社破滅派
11
1.  degiholly_commentmeta	
  
2.  	
  degiholly_comments	
  
3.  	
  degiholly_contact_form_7	
  
4.  	
  degiholly_links	
  
5.  	
  degiholly_options	
  
6.  	
  degiholly_postmeta	
  
7.  	
  degiholly_posts	
  
8.  	
  degiholly_terms	
  
9.  	
  degiholly_term_relationships	
  
10.  	
  degiholly_term_taxonomy	
  
11.  	
  degiholly_usermeta	
  
12.  	
  degiholly_users	
  
たとえば、講座専用ブログ
I	
  wanna	
  be	
  PHPerでは、12
個のテーブルを利用してい
ます。
WordPressにみるRDBMSの構造(2)
10.4.18 (C) 株式会社破滅派
12
RDBMSでは、データの重複を避けるため、テーブルを細かく分けます。	
  
1つのデータを1つの箇所に(1	
  fact	
  in	
  1	
  place)という原則を守るためです。	
  
この方法を正規化といいます。	
  
注文ID 注文日 顧客名 住所 支払方法
1 2010.8.29 注文太郎 東京都 クレジット
2 2010.8.31 山田花子 千葉県 代引き
3 2010.9.21 EC三郎 神奈川県 代引き
4 2010.10.1 注文太郎 東京都 クレジット
ここが重複しているので、2つに分けます
注文ID 注文日 顧客ID 支払い方法
1 2010.8.29 1 クレジット
2 2010.8.31 2 代引き
3 2010.9.21 3 代引き
4 2010.10.1 1 クレジット
顧客ID 顧客名 住所
1 注文太郎 東京都
2 山田花子 千葉県
3 EC三郎 神奈川県
WordPressにみるRDBMSの構造(3)
10.4.18 (C) 株式会社破滅派
13
たとえば、Aというタイトルの投稿が属するカテゴ
リー名を求めるためには?
wp_posts wp_term_relationshipswp_terms
1.  wp_postsからAというタイトルの投稿のIDを求める	
  
2.  wp_term_relationshipsから投稿IDに紐づいたカテゴリーIDを求める	
  
3.  wp_termsから該当するカテゴリーIDの名前を取得する
SELECT	
  term.name	
  FROM	
  wp_posts	
  as	
  p,	
  wp_terms	
  as	
  term,	
  
wp_term_relationships	
  as	
  rel	
  WHERE	
  p.post_title	
  =	
  ‘A’	
  AND	
  p.ID	
  =	
  rel.object_id	
  
AND	
  rel.term_taxonomy_id	
  =	
  term.term_id;
データベースへ
の命令文をSQL
といいます。
おまけ:データベースとの付き合い方
10.4.18 (C) 株式会社破滅派
14
データベース(DB)は昨今のWeb技術の発展を支えるもっとも中心的な技術です。	
  
その分だけ奥が深く、データベースエンジニアというお仕事もあります。	
  
身につけるためにはある程度の時間が必要です。
PHPの知識
M
y
S
Q
L
の
知
識
WordPressなどのCMS利用
CackPHPなどの	
  
フレームワークによる開発
Yahoo!	
  のような	
  
大規模サイトの構築・運営
ALAYAのような	
  
CMSの開発	
  
デザイナーになるのか? なんでもできるフロ
ントエンド・ディベロッパーになるか? バリ
バリのWebプログラマを目指すか?	
  
そのどれを目指すかによりますが、下記のよう
なリファレンスを1冊手元においておくと、困る
ことがないでしょう。
MySQLクックブック	
  
Volume	
  1、2	
  
上下巻併せて10,000円超!	
  
「本2冊で1万円」と考えると
高いですが、これがあるだけ
で何日か節約できると思えば、
安い買い物です。

05 はじめてのmy sql