前回の続きです。ターミナル(黒い画面)を叩かずにDB(データベース)をSQL文でコチョコチョしたい。
一番身近でSQL文に触れられるのは「Local by Flywheel」の「Adminer」でした。
今回のテーマはWordPressに投稿した「我輩は猫である」を「犬」にする、です!
※目次:
Adminerの4つのメニュー
前回、WordPressのローカル環境である「Local by Flywheel」の「Adminer」からDBにアクセスし、エクスポートしたダンプ(.sql)ファイルの中を見ました。
※参考:SQL文はLocal by FlywheelのAdminerから慣れよう(WordPressのDB操作:その1) - クモのようにコツコツと
今回はAdminer上でSQL文を書いてみたいと思います。
Adminerのサイドバーを見ると「メニュー」と「テーブル」に別れています。
メニューは下記の4つです。
- SQL command
- Import
- Export
- Create table
SQL command:SQL文入力
一つ目のメニューはSQLコマンド。ここからSQL文でDBへの命令が書けます。
Import:ダンプファイルインポート
二つ目はインポート。ここから外部のDBのダンプファイルをインポートできます。別のサーバのDBのデータを当環境に移行する時に使います。
Export:ダンプファイルエクスポート
三つ目はエクスポート。こちらはインポートと逆でDBのダンプファイルをエクスポートします。当環境のDBのデータを別のサーバに移行するときに使います。(ここから前回ダンプファイルを書き出しましたね)
Create table:新規テーブル追加
最後はクリエイトテーブル。ここから新規テーブルを追加します。WordPressのコアなテーブルとは別に例えば商品情報などの独自のデータを置きたい場合に使います。
前回も解説したように「テーブル」とはエクセルの表のように「行(レコード)」と「列(カラム)」があるデータ形式です。
※参考:SQL文はLocal by FlywheelのAdminerから慣れよう(WordPressのDB操作:その1) - クモのようにコツコツと
WordPressのテーブル構成
次はWordPressのテーブルを見ていきましょう。前回も触れたようにWordPressにはテーブルがあらかじめ用意されています。
- wp_commentmeta
- wp_comments
- wp_links
- wp_options
- wp_postmeta
- wp_posts
- wp_termmeta
- wp_terms
- wp_term_relationships
- wp_term_taxonomy
- wp_usermeta
- wp_users
なんだか随分たくさんありますねぇ。。頭に「wp_」という接頭辞ついています。
よく見ると後ろに「meta」がついたペアになっている物が見受けられます。
metaはメタデータの意味。メタデータとは詳細情報のことです。
※参考:メタデータ
また、「term_hoge」とターム系で名前が似ている物も見受けられます。ある程度のまとまりはありそうです。
「wp_posts」は投稿データのテーブル
今回はテーブル「wp_posts」の中を見ていきたいと思います。wp_postsは投稿データが入っているテーブルです。
「Table」の「wp_posts」をクリック。(左メニューの「wp_posts」から開いても同様です)
「Show structure」画面が開きました。ストラクチャーは「構造」という意味。投稿ID、Author(投稿者)、Date(投稿日)などの構造が表示されているようです。
Show structureタブの左型「Select data」タブをクリック。
「Select: wp_posts」画面が開きます。いくつかの投稿データが入っています。(正確にいうと投稿だけでなく、固定ページやカスタム投稿もここに入ります)
一番上の「ID 1」の「edit」をクリック。
投稿「ID 1」の編集画面が開きます。上から「投稿日時」「本文」「タイトル」になります。
なんと、WordPressのダッシュボードだけでなく、この画面からも投稿を編集できちゃうんですね!タイトルが本文の下にあるのがちょっとクセありますw
この画面はタイトル「Hello word!」という投稿のデータです。
「Local by Flywheel」の「VIEW SITE」でサイトを見てみましょう。
先ほど「Adminer」で見た「Hellow world!」と同一内容が投稿されていますね。
「我輩は猫である」を投稿する
次に、今回の題材となる「我輩は猫である」を新規投稿したい。WordPressのダッシュボードを開きます。
「Local by Flywheel」の「ADMIN」をクリック。
前回書いたようにダッシュボードのログイン画面が開きますので、IDとパスワードを入力してログインします。
ログインしたら新規投稿を追加する。ダッシュボードの「投稿>新規追加」で投稿。*1
「青空文庫」から夏目漱石先生の「我輩は猫である」から。*2
※参考: 図書カード:吾輩は猫である
サイトを表示。投稿が追加された!
Adminerの「wp_posts」にも追加されている!
「Edit」画面。ここからも修正できるけど、ダッシュボードと比べると枠が狭くて修正しにくそうね。。
SQL文で「我輩」を「犬」にする!
再びAdminerの「SQLコマンド」を開く。ここにSQL文を書いてみる。
SQL文(DDL、DML、DCL)
前回解説したように、SQL文は「DDL」「DML」「DCL」の3種類がある。
- DDL:データ定義言語
- DML:データ操作言語
- DCL:データ制御言語
DMLの基本命令(SELECT文、INSERT文、UPDATE文、DELETE文)
今回はデータ操作言語である「DML」を書きたい。DMLの基本命令は下記の四つ
- SELECT文:検索
- INSERT文:追加
- UPDATE文:更新
- DELETE文:削除
(2020/07/27追記)
この4つの命令文はデータベースの基本操作「CRUD(クラッド)」に相当する。
SQL文 CRUD 機能 INSERT文 Create データ追加 SELECT文 Read データ取得 UPDATE文 Update データ更新 DELETE文 Delete データ削除
※参考:【MySQL入門③】データベースの基本操作CRUDを解説! | Snome;
「SELECT文」で「猫」を検索
まずは手初めに「猫」という単語を検索してみる。
このような書式になります。
SELECT カラム名 FROM テーブル名 WHERE カラム名 LIKE "文字列"
- FROMのテーブルからSELECTのカラムから取得
- WHEREのカラムからLIKEの文字列を含む、という条件で
前回解説したように、カラムはエクセルでいう列のことです。
このように打ってみる。
SELECT * FROM wp_posts WHERE post_content LIKE "%猫%"
wp_posts
テーブルのすべて(*
)のカラムから取得post_content
カラムから「猫」という文字列を含む条件で
文字列「猫」の両サイドのパーセント%
で挟むと文章の途中にある文字列も検索ができます。
%は0以上の文字列というパターン文字になります。文字列の前後につけることで文章の途中に含まれていてもマッチするようになります。
※参考:WordPressで学ぶデータベース(MySQL)の基礎 | webOpixel
「Execute」をクリックして命令を実行。
検索された!
「UPDATE文」で「猫」を犬にする
次に「猫」という文字列を「犬」にしてみます。 「UPDATE文」で書きます。
UPDATE テーブル名 SET `カラム名` = replace(`カラム名`, '検索文字', '置換文字')
- テーブル名の
SET
カラム名の中から、replace
でカラム名の検索文字を置換文字に置き換えます。
※参考:[WordPress] 投稿記事内の文字列をSQL文で一括置換 | しゃけろぐ
こう書いてみた。
-- 本文の「猫」→「犬」 UPDATE wp_posts SET `post_content` = replace(`post_content`, '猫', '犬')
wp_posts
テーブルの本文post_content
の「猫」を「犬」に
置換された!
他にもいろいろ打ち替えてみた。
-- タイトルも「猫」→「犬」 UPDATE wp_posts SET `post_title` = replace(`post_title`, '猫', '犬') -- タイトルの作者名「夏目漱石」→「冬目漱水」 UPDATE wp_posts SET `post_title` = replace(`post_title`, '夏目漱石', '冬目漱水') -- 本文「ニャーニャー」→「ワンワン」 UPDATE wp_posts SET `post_content` = replace(`post_content`, 'ニャーニャー', 'ワンワン') -- 本文「吾輩」→「拙者」 UPDATE wp_posts SET `post_content` = replace(`post_content`, '吾輩', '拙者') -- タイトル「吾輩」→「拙者」 UPDATE wp_posts SET `post_title` = replace(`post_title`, '吾輩', '拙者') -- 本文ルビ「わがはい」→「せっしゃ」 UPDATE wp_posts SET `post_content` = replace(`post_content`, 'わがはい', 'せっしゃ')
できた!
「拙者は犬である」完成!
今回は1投稿だがサイト全体に渡って文字列を置換できます。URLや会社名、電話番号などの変更に活用できそうです!
でもなんだか…あまりにも一瞬に「あっ」という間に検索置換できてしまったので、ちょっと怖さすら感じるなー。失敗すると後戻りできない。作業前は「Export」でデータをバックアップした方が安心ですね。
「INSERT文」と「DELETE文」は投稿自体の追加、削除
「INSERT文」と「DELETE文」も何か書いてみようと思ったが、調べたところ文字列ではなく投稿自体の追加、削除の規模のようだった。今回は参考記事の紹介にとどめます。
※参考:「INSERT文」で投稿を追加
WordPressにSQL(INSERT文)で直接投稿する方法
※参考:「DELETE文」で投稿を削除
WordPressの過去記事をSQL文を使って一気に削除する方法 | その日暮らし
最後に
Local by FlywheelのAdminerのからSQL文でDBの検索(SELECT文)と置換(UPDADE文)をやってみました。1行でデータ全体がザーッと置き換わるのは快感があります。
DBはターミナル(黒い画面)でコマンド打つイメージだったけど、GUIで実際のSQL文を書くと、どんなことができるのかイメージしやすいです。*3
検索(SELECT文)はデータに影響がないので気軽にできます。置換(UPDADE文)の方はあまりに簡単すぎて、本番環境で使うにはちょっと怖いですね…。まずはローカル環境のテストサイトで気軽に体験するのをオススメいたします。
なお、PHPの中でSQL文を書いてDBを直接操作する方法もあるようなので、今後そちらもトライしていきたいと思います。それではまた!
※参考:サーバサイドの基本まとめました!
【WordPress、PHP、SQL文】Webデザイナーでもわかるサーバサイドの基本まとめ!(6記事) - クモのようにコツコツと
idr-zz.hatenablog.com
※参考:【WordPress、PHP、SQL文】サーバサイドの基本まとめ
qiita.com