20191222のMySQLに関する記事は4件です。

【MySQL】エイリアスを使える句について

MySQL Advent Calendar 2019の20日目エントリです。

枠が空いていたので、遅ばせながら参加させていただきました。

記事に特別感は全くありません。
エイリアスの動作について、最近の気づきをまとめました。

テスト用テーブルの準備

テーブルを用意します。

CREATE TABLE sales(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    sales_date DATETIME,
    price INT
);

適当にレコードをセットします。

mysql> SELECT * FROM sales;
+----+---------------------+-------+
| id | sales_date          | price |
+----+---------------------+-------+
|  1 | 2019-10-01 00:00:00 |   100 |
|  2 | 2019-10-05 00:00:00 |   300 |
|  3 | 2019-11-01 00:00:00 |   200 |
|  4 | 2019-11-20 00:00:00 |   100 |
|  5 | 2019-12-01 00:00:00 |   500 |
+----+---------------------+-------+
5 rows in set (0.00 sec)

句の中でエイリアスを使う

試しにGROUP BY句の中でエイリアスを使ってみます。

SELECT
    DATE_FORMAT(sales_date, '%Y%m') AS sales_month,
    COUNT(id) AS sales_count
FROM
    sales
GROUP BY
    sales_month

グループ化がされ、正しく反映されました。

+-------------+-------------+
| sales_month | sales_count |
+-------------+-------------+
| 201910      |           2 |
| 201911      |           2 |
| 201912      |           1 |
+-------------+-------------+

カラム名との重複に注意

エイリアスとカラム名(sales_date)が重複していると、GROUP BY句の中ではsales_dateカラムの方が優先されてしまいます。

SELECT
    DATE_FORMAT(sales_date, '%Y%m') AS sales_date,
    COUNT(id) AS sales_count
FROM
    sales
GROUP BY
    sales_date

エイリアスではなくsales_dateとしてグループ化されてしまい、期待する結果が得られませんでした。

+------------+-------------+
| sales_date | sales_count |
+------------+-------------+
| 201910     |           1 |
| 201910     |           1 |
| 201911     |           1 |
| 201911     |           1 |
| 201912     |           1 |
+------------+-------------+

エイリアスが使える句

はじめ、評価順はSELECTの方がGROUP BYより後なので、句の中でエイリアスは使えないと思っていました。
SELECT文の評価順序の話

他には、ORDER BY句HAVING句の中でエイリアスが使えます。
B.5.5.4 カラムエイリアスに関する問題

SELECT
    DATE_FORMAT(sales_date, '%Y%m') AS sales_month,
    COUNT(id) AS sales_count,
    SUM(price) AS sales_price
FROM
    sales
GROUP BY
    sales_month
HAVING
    sales_month > '201910'
ORDER BY
    sales_month
DESC
+-------------+-------------+-------------+
| sales_month | sales_count | sales_price |
+-------------+-------------+-------------+
| 201912      |           1 |         500 |
| 201911      |           2 |         300 |
+-------------+-------------+-------------+

この動作はMySQLの拡張機能だそうです。
他のDBMSにおける挙動は、各リファレンスを参照しなければ分かりません。
ORDER BY句で別名が使えてGROUP BY句では別名が使えない理由

ただし、標準SQLによるとWHERE句ではエイリアスを使えないとのことです。

お読みいただきありがとうございました。
良いクリスマスを!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Web開発勉強のためWordpressでポートフォリオサイトを開設するまで③〜XAMPPローカル環境構築失敗編〜

XAMPPでローカル環境を構築できたといったな。あれは嘘だ。

いや、嘘ではないんですけど、うまくいったのはインストールまででした。
講座の動画に従って投稿や固定ページの更新をしたところ、
「更新に失敗しました。 エラーメッセージ: 返答が正しい JSON レスポンスではありません。」
というエラーメッセージが表示され、なにもできない状態でした。

いまだにデータ交換をテキストやらCSVでやっている仕事ですので、XMLはおろかJSONとは、みたいな状態で、ググってもいまいち解決方法がピンとこない・・・
UdemyのQ&Aを覗いても同様の質問がなかったため、思いきって自ら質問してみました。
すると、すぐに先生自ら回答をくださいました!

php.iniのmax_execution_timeをデフォルト設定から300に変更して、Apacheを再起動してみてください。

とのこと。ちなみにこの日は有給予定だったので平日朝の7時ぐらいに書きこみました。先生ヒマなのかしら。
というわけで、php.iniを探してパラメーターを上書き。
念のためPCも再起動しましたが・・・残念ながら改善せず。
どうするかなあと悩みましたが、この時点でもうローカル環境は諦めるつもりでした。
Railsチュートリアルやろうとした時のAWSアカウント、まだ無料枠残ってるからそれ使って環境構築すればええやん、と。
程度にもよりますが、初心者向けの講座もろもろいじって無料枠超えても1000円は取られないらしいので、今後のAWSの勉強も兼ねてAWSで環境構築することにしました。

というわけで、先生にはうまくいかなかったことと、AWSで環境構築する旨をお伝えしました。
先生からも、

XAMPP とWordPressのいずれが原因かどうか切り分けるために、AWSやVPSなどでApacheやNginxで試してみるのがよいと思います。

とのご回答が。めんどくさくなったんですね、わかります。

ちなみに先生からlogsフォルダにエラーログ出てない?と聞かれたんですが、残念ながらエラーログは見当たりませんでした。
これでAWSの環境構築を試してうまくいかなかったら、いよいよMAC買うしかないな、と思いました。

そんな背水の覚悟で臨んだAWSのWordpress環境構築ですが、下記のサイトを参考にしました。
https://skillhub.jp/blogs/197

結論から言うと、ようやくうまくいきました。
ターミナルの開き方とかAWSの操作面で不安がありましたが、それほど難しくないと思います。
投稿や固定ページの更新も問題なくオーケー。
ようやくスタートラインに立てたかなという感じです。
次回からは、サイトを作っていく中でつまづいた点などを書いていきたいと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Web開発勉強のためWordpressでポートフォリオサイトを開設するまで②〜MAMPローカル環境構築失敗編〜

Wordpressの講座で、ローカルで使用環境を構築するための案内をしていたので、動画に沿って環境構築をしていきました。
PCは動画ではMacを使って案内していましたが、当方Windowsでの環境構築となります。
ちなみに使用PCのスペックは、
・Windows10 HOME バージョン1909
・CPU Cerelon(R) N4000CPU 1.10GHz 1.10GHz
・メモリ 4GB
・ストレージ HDD1TB
です。(ムダにHDD1TBなのがツッコミどころですw)

まずMAMPをインストールするよう案内されました。
https://www.mamp.info/
LAMPをもじったオープンソースで、Webサーバーの環境構築が簡単にできるソフトです。
WindowsだからWAMPだよなーと思いつつ無事にインストールまで完了。

動画の案内通り、MAMPのフォルダ内にあるhtdocs内にダウンロードしたWordpress一式を移動。
MAMPを起動させ、ブラウザが起動したのでパスにWordpressのフォルダ名を指定。
この時点でインストール画面が表示されるはずなのですが・・・うまくいかない。
ネットを調べていたところ、wp-config.phpをパスに指定すればオーケーとのことだったのでその通りに操作。
(参考サイト:MAMP・Wordpressセットアップの詳細な手順はこちらのサイトで丁寧に解説されています。)
 ・https://bazubu.com/how-to-insall-wp-in-mamp-23798.html
 
無事にセットアップ画面が表示されたので、データベースを作成。
Wordpressのセットアップ手順に従い、データベース名やサイト名を入力。
無事にダッシュボード画面が開きました!わーぱちぱちぱち!

え、ローカル環境構築失敗してないじゃないかって?
そう、タイトル詐欺です。ここまでは。
とりあえずその日はそこまでで操作を終え、翌日にMAMPを起動したところ・・・

あれ?Apacheに緑のランプがつかないぞ?
まあいいかと気にせずWordpressを開こうとするもエラーに。そりゃそうだ。
ネットで調べていたらポート番号が別のアプリケーションと被ってダメなことがあるらしい。
ならばとポート番号をいろいろ変更するも・・・やはりApacheのグリーンライトは点灯せず。
うーむ、困ったなあ・・・と思っていたところ、そういえばUdemyには講座ごとにQ&Aが存在していたことを思い出す。
Q&Aを眺めていたところ、同様の質問が何件か。やはりけっこうある現象なのね。
講師の先生が自ら原因を探っていくも、最終的にはXAMPPを使っては?という回答に大半が落ち着いている。めんどくさくなったんですね、わかります。

ということで、自分もXAMPPをインストールしました。
https://www.apachefriends.org/jp/index.html
インストール手順は下記のサイトを参考にしました。
https://bazubu.com/xampp-wordpress-23795.html

MAMPよりボタンとか項目が多いので戸惑うかもしれませんが、基本の流れは一緒なのですんなりインストールできました。
念のためPCを再起動しても問題ないか確認したところ、無事にWordpressのダッシュボード画面を開くことができました!

というわけで、MAMPでうまくいかなかった皆様、その時はXAMPPをインストールしましょう!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

heroku run rails db:migrate:status のコマンドの意味

目的

  • 表題のコマンドをあまり理解せず実行していたのでまとめる。
  • コミュニティやtwitterで教えていただいた内容を忘れないようにまとめる。

heroku run rails db:migrate:statusとは

  • herokuサーバでのマイグレーションステータスを出力するコマンドである。
  • ちなみにherokuサーバへのマイグレーションを行うコマンドは$ heroku run rails db:migrateである。

結論

コマンドを分解してみる

  • heroku runの意味を下記に記す。
    • run a one-off process inside a Heroku dyno→「 Heroku dyno内で1回限りのプロセスを実行する。」(コマンド$ heroku --helpで調べた。)
    • dynoはアプリを実行するためのコンテナのことらしい、「そのコンテナ内で後述するプロセスを実行するよ〜」って感じ。
  • rails db:migrate:statusの意味を下記に記す。

ちなみに

  • Rails5以降はrailsコマンドを実行すればrakeコマンドを探して実行してくれるらしい。
  • なので下記コマンドは同じ挙動をする。
$ heroku run rails db:migrate:status
$ heroku run rake db:migrate:status

だけど

  • railsコマンドを実行するとrakeまでコマンドを探しに行って実行してくれる。
  • rakeコマンドを実行してもrailsコマンドを探しに行ってくれない。

参考にしたリンクを載せる

謝辞

  • 本投稿内容はTwitter、コミュニティのslack、キャリアアドバイザーさんからいただいた知識です。
  • 毎度知恵をおお貸しいただき本当にありがとうございます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む