ドットインストールで学習1

娘用に契約したドットインストールで、自分も学習を始めた。

 

まずは、Bootstrapから。

終わった学習をメモしていく。

 

 

◆ Bootstrap 4入門

Bootstrap 4入門 (全22回) - プログラミングならドットインストール

2020/11/07 - 2020/11/08

#01 - #22

簡単にけっこうなものが実装できた。感動。

 

 

◆ React入門

React入門 (全19回) - プログラミングならドットインストール

2020/11/09 - 2020/11/09

#01 - #19

けっこう複雑なんですけど。

これくらいガッツリ作るんであれば、これまでの技術でもあまり手間が変わらないと思うんだが。Reactの何が斬新なんだろうか。もう少し深堀りしてみたいと思う。 

Kindleで何冊か本を読んでみたが、Reactは求めてるものと違う気がしてきた。

サーバ側でやるような複雑な処理をブラウザ側で出来る、つまりページの一部を更新する時に使える技術っぽい。

Ajaxだと煩雑になるような処理を実装するためのもの ⇒ Reactって感じみたい。

Facebookみたいなページを作りたい時に良いんだろう。

Reduxっていうものもあるみたい。大きめの規模の開発をする時に状態を管理するためにReduxが使えるらしい。

あとReact bootstrap。これは、Reactの構文内で出力をBootstrapのデザインで出力したい時に使うっぽい。

React bootstrapを使ってポートフォリオを作成. 【所要時間】 | by Tatsuya Asami | Medium

 

 

◆ chart.js

Chart.js入門 (全10回) - プログラミングならドットインストール

2020/11/10 - 2020/11/10

#01 - #10

すごい!感動。こんなに簡単にグラフが出来るなんて。やはり定期的に新しい技術、ツールを勉強する時間を作ることは大事と再認識。

 

 

◆ Go言語

はじめてのGo言語 (全10回) - プログラミングならドットインストール

2020/11/10 - 2020/11/10

#01 - #10

まぁこのレッスンをやった感じとしては、普通のプログラミング言語。速度が速いという噂だから、規模が大きくなってくると違いを実感してくるんだろうか。

あと、ドットインストールで実動作を学習してから、kindle unlimitedの対象本を読むと、体系的に理解が深まるから良いな。

良さそうな点 ⇒ 並列処理、GoだけでiOSAndroidとWebに対応。動作確認とアプリストアでの公開まで出来るらしい。

 

 

Java

はじめてのJava (全10回) - プログラミングならドットインストール

2020/11/12 - 2020/11/12

#01 - #10

Goと同じもの(ループとif文で学ぶ)を作る授業だった。

基本は同じだな。Javaの概要を知らなかったので学べて良かった。

Kindleでも何冊か読んでみたいと思う。

大津 真って人の本はわかりやすい。

 

 

Python

はじめてのPython (全9回) - プログラミングならドットインストール

2020/11/12 - 2020/11/12

#01 - #09

これもGoやJavaのレッスンと同じで数当てゲームを作って学ぶレッスンだった。

言語ってほぼ同じだな。英語とドイツ語ほどの違いもなく、標準語と名古屋弁ほどの違いかもしれない。

 

 

Ruby

はじめてのRuby (全9回) - プログラミングならドットインストール

2020/11/13 - 2020/11/13

#01 - #09

PHPに近いな。簡単な記述の方がいいな。

はじめての◯◯は、すべて数当てゲームなんだな。20分で終わった。 

 

 

◆ マテリアルアイコン

マテリアルアイコン入門 (全6回) - プログラミングならドットインストール

2020/11/13 - 2020/11/13

#01 - #06

良かった。Bootstrapみたいなものだな。

というかBootstrapにもアイコンがあるんだな。

スマホ対応!Bootstrapで使えるアイコンまとめ | TechAcademyマガジン

 

 

Google Charts

Google Charts入門 (全9回) - プログラミングならドットインストール

2020/11/13 - 2020/11/13

#01 - #09

chart.jsとほぼ同じだな。chart.jsの方が使いやすかった。

 

 

◆ Google Maps API

Google Maps API入門 (全17回) - プログラミングならドットインストール

2020/11/16 - 2020/11/17

#01 - #11

使わなさそうなので、途中で辞めておいた。いまは支払方法の登録が必要みたい。

一定回数のAPI使用までは無料。

 

 

JavaScriptで学ぶFirebase入門 (全17回)

Google Chrome拡張機能入門 (全20回)

この辺は動画を飛ばしで見ただけ。当面は使わなそう。

 

 

Chrome Developer Tools入門

Chrome Developer Tools入門 (全10回) - プログラミングならドットインストール

2020/11/17 - 2020/11/17 

#01 - #10

これは良かった。少し古いけど。知らないツールもあり勉強になった。 

 

 

Google Fonts入門

Google Fonts入門 (全5回) - プログラミングならドットインストール

2020/11/17 - 2020/11/17

#01 - #05

まずまず良かった。こんなものがあったとは知らなかった。

Google Fonts

 

 

◆ Google Apps Script入門

Google Apps Script入門 (全20回) - プログラミングならドットインストール

2020/11/17 - 2020/11/18

#01 - #20

まぁまぁかな。エクセル+@という感じだな。

ただ知らなかったので知れて良かった。

 

 

◆ Docker

Docker入門 (全11回) - プログラミングならドットインストール

2020/11/18 - 2020/11/18

#01 - #11

Dockerが何かということが分かった。サーバー内に諸々作った構成をそのままイメージに固めて、他でサーバを作った時にそのイメージをpullしてくればすぐに環境を再現できるっていうものらしい。

もろにAWSのAMIだな。AMIだったら2クリックくらいで出来るんだが。AWSを使わずに、一からサーバ環境を作っているような会社にとっては有効なんだろうな。

【AWS利用者向けの初めてのDocker】EC2とDockerコンテナのライフサイクルを比較 | Developers.IO

 

 

UNIXコマンド

UNIXコマンド入門 (全28回) - プログラミングならドットインストール

2020/11/18 - 2020/11/18

#01 - #28

UNIXコマンドの基礎。知らなかったことを知れて良かった。

 pwd は print working directory の略。

 -r 再帰的 reverse

 シンボリックリンク ln -s

 下階層のフォルダ作成 mkdir -p

 history !3

 cd !$

 コマンド履歴の検索 Ctrl r

 /etc/passwd

 /etc/group

 パーミッションの x は executeの略

 echo $PATH

 export PATH=/home/***:$PATH

 mkdir test && cd test

 ブレース展開 mkdir app{1..5}

 find test -name 'app1*' -type d

 

 

◆ git

git入門 (全22回) - プログラミングならドットインストール

2020/11/18 - 2020-11/19

#01 - #22

VagrantとVirtual Box でWindows内にLinux環境を作った。Windowsに直接Gitを入れても、レッスン内容と合致しないので使いにくい。

 git log --oneline

 git log -p

 addの後 git diff --cached

 直前コミットを修正 git commit --amend

 直前のコミットに戻る git reset --hard HEAD

 指定のコミットに戻る git reset --hard ichiinaID

 戻ったコミットを取り消し git reset --hard ORIG_HEAD

 引っ張ってくる git merge sakinodirekutori

 git tag v1.0 / git tag / git tag v0.9 ichiinaID / git tag -d v1.0

 短縮・エイリアス git config --global alias.br branch

 git config -l

 共有リポジトリ git init --bare

 リモートのリポジトリ作成 git remote add origin ~/ourweb.git

 git commit -am "comment"

 conflictが起きた時は git pullしてからvimで変更してpush

 

 

sed

sed入門 (全10回) - プログラミングならドットインストール

2020/11/19 - 2020/11/19

#01 - #10

仮の領域に編集したテキストを保持する感じ。grepしたものをsedして、最終的に欲しい情報だけをテキストに出力とか出来る。

 sed -e '1i\----' -e '$a\----' -e '/^$/d' names.txt

 sed 'y/to/OT/' names.txt

 sed 's/apple/Apple/g' items.txt

 sed 's/apple/Ringo/ig' items.txt

 sed 's/[0-5]/【&】/' items.txt

sed コマンド | コマンドの使い方(Linux) | hydroculのメモ

  

 

ここまでで計10日

1日5時間くらいかな。

 

 

vim

vim入門 (全18回) - プログラミングならドットインストール

2020/11/19 - 2020/11/20

#01 - #18

知らないことが多くあり良かった。

 gg先頭に戻る

 G 最終行に行く

 Ctrl F 一画面下

 Ctrl B 一画面上

 w単語単位で進む

 b単語単位で戻る

 行頭 ^

 行末 $

 f検索文字;

 % 閉じる箇所までジャンプ

 v 文字選択

 V 行選択

 Ctrl v 矩形選択

 矩形選択後 Shift iで全挿入

 Shift v + Shift g全選択

 x 一文字削除

 3yy 三行コピー

 Ctrl n 上方向に検索

 *# カーソル位置の単語を検索

 :s/title/Title/g 行置換

 :%s/a/A/gc 全置換

 u アンドゥ

 Ctrl r リドゥ

 :sp 画面分割

 :close 分割終了

 :tabe filename タブで開く

 gt タブ移動

 :tabclose タブを閉じる

 vim -p filename1 filename2 タブでvimを開く

 = インデントを揃える

 cit まとまりを削除

 :set number 行番号を表示

 :set ingnorecase 検索時の大文字小文字を区別しない

 :set noignorecase 元に戻す

 

 

正規表現

エディタで学ぶ正規表現入門 (全18回) - プログラミングならドットインストール

2020/11/20 - 2020/11/20

#01 - #18

これも勉強になってよかった。

 \w 文字

 \s スペースタブ改行

 \D 数字以外

 \d{5,} 数字を5回以上繰り返し

 -? ハイフンが0個か1個

 -+ ハイフンが1個以上

 -* ハイフンが0個以上

 ^\d 行頭が数字

 \d$ 末尾が数字

 \bあいう\b 区切られた単語だけ

 [bch] 任意のbch一文字

 [^c] 対象c以外の一文字

 [^cb] 左記2つ(cまたはb)以外

 ()で囲った検索対象を$1・$2で置換

 (\d),\s\1 連続する2の数字を検索する後方参照バックスラッシュ1

 

 

awk

AWK入門 (全16回) - プログラミングならドットインストール

2020/11/20 - 2020-11-21

#01 - #16

色々と知れて良かった。

 awk '{ print $4 }' scores.dat 4番目のデータ取得

 awk '{print NR":"$0}' scores.dat ナンバーオブレコード行番号を付ける

 フィールドセパレータをスペースから変える時 BEGIN{ FS = "-" }

 レコードセパレータを変える時 BEGIN{ RS = ":" }

 アウトプットフィールドセパレータ・レコードセパレータ BEGIN{ OFS = "@" ORS = "|" }

 4レコード以前の4番目出力 awk 'NR < 4{print $4}' filename.txt

 桁数を指定して文字を差し込む awk 'NR > 96{ printf "Name: %-10s sum:%10d Avg:%010.2f\n", $3, ($4+$5+$6+$7), *1;
配列にキーが存在するか確認 array_key_exists('taguchi', $scores) === true) {

配列に値が存在するか確認 in_array(80, $scores) === true) {
配列内に指定した値があるか検索してキー取得 array_search(70, $scores)

配列の値でソート asort($scores); arsort($scores);
配列のキーでソート ksort($scores); krsort($scores);

 

多次元配列のソート

$scores = array_column($data, 'score');
$names = array_column($data, 'name');

array_multisort(
 $scores, SORT_DESC, SORT_NUMERIC,
 $names, SORT_DESC, SORT_STRING,
 $data
);

 

fopenを使わずにfileに書き込み

file_put_contents('names.txt', $contents); file_get_contents('names.txt');

 

配列でfileから取得 file('names.txt', FILE_IGNORE_NEW_LINES);

1日後のUNIX TIME strtotime('2020-05-07 +1 day')

 

 

◆ jQuery入門

【サポート終了】 jQuery入門 (全20回) - プログラミングならドットインストール

2020/12/29 - 2020/12/29

#01 - #20

$(document).ready(function() { は $(function() { に省略できる

 

セレクタ

直下の子要素のみ指定 $("#main > .item").css('color', 'red');

下の子要素すべて $("#main .item").css('color', 'red');

itemの隣にあるitemのみ $(".item + .item").css('color', 'red');

 

フィルタ

一致するものの2番目のみ $("#sub > li:eq(2)").css('color', 'red');

より大きい $("#sub > li:gt(1)").css('color', 'red');
奇数のみ $("#sub > li:odd").css('color', 'red');
値に含むもの $("#sub > li:contains('4')").css('color', 'red');

 

DOM要素の指定

対象の子要素を指定 $("#sub").children().css('color', 'red');
対象の次の要素を指定 $("#sub > li:eq(2)").prev().css('color', 'red');
同列の兄弟要素 $("#sub > li:eq(2)").siblings().css('color', 'red');

 

属性のセレクタ

googleと一致 $('a[href="http://google.com"]').css('background', 'red');

を含む *=
先頭から始まる ^=
末尾が対象のもの $=

値の取得 console.log($('p').css('color'));

既存クラスをタグに付与 $('p').addClass('myStyle');

属性の取得 console.log($('a').attr('href'));

属性の変更 $('a').attr('href', 'http://google.co.jp');

dataの取得

 <a href="http://google.com" data-xxxxx="google">google</a>

 console.log($('a').data('xxxxx'));

 

テキストの変更 $('p').text('just changed');

HTMLに変更 $('p').html('<a href="">click me!</a>');

要素の中を消す $('p').empty();

要素自体を消す $('p').remove();

要素の追加 var li = $('<li>').text('just added'); $('ul > li:eq(1)').before(li);

 

末尾に追加 $('ul').append(li);

コールバック関数 処理後に実行 

$('#box').fadeOut(800, function() {
 alert("gone!");
});

 

クリックでアラート

$('#box').click(function() {
 alert("hi!");
});
$('#box')

 

マウスオーバーで色変更

.mouseover(function() {
 $(this).css('background', 'green');
})

マウスアウトで色変更
.mouseout(function() {
 $(this).css('background', 'red');
})

マウスを動かすとX座標を表示
.mousemove(function(e) {
 $(this).text(e.pageX);
});
 

$('#name')

マウスが要素に当たると
.focus(function() {
 $(this).css('background', 'red');
})

マウスが要素から外れると

.blur(function() {
 $(this).css('background', 'white');
});

値が変わると
$('#members').change(function() {
 alert('changed!');
});

 

読み込み後に追加した要素に対して操作

$('button').click(function() {
 var p = $('<p>').text('vanish!').addClass('vanish');
 $(this).before(p);
});

$('body').on('click', '.vanish', function() {
 $(this).remove();
});

 

もっと読み込むボタン

<button>もっと読む</button>
<div id="result"></div>

$(function() {

 $('button').click(function() {
  $('#result').load('more.html');
 });

});

 

ajaxは非同期

処理が終わる前に次の処理をする

コールバック関数で処理を追加すれば、読み込んだ対象に対して処理が可能

$(function() {

 $('button').click(function() {
  $('#result').load('more.html', function() {
   $('#message').css('color', 'red');
  });
 });

});

 

jqueryでget取得

<input type="text" name="name" id="name">

<input type="button" id="greet" value="Greet!">

<div id="result"></div>

 

$('#greet').click(function() {

 $.get('greet.php', {
  name: $('#name').val()
 }, function(data) {
  $('#result').html(data.message + '(' + data.length + ')');
 });

});

 

greet.php

$rs = array(
 "message" => htmlspecialchars("hi! " . $_GET['name'], ENT_QUOTES, "utf-8"),
 "length" => strlen($_GET['name'])
);

header('Content-Type: application/json; charset=utf-8');
echo json_encode($rs);

 

 

◆ Node.js

Node.js入門 (全16回) - プログラミングならドットインストール

2020/12/29 - 2020/12/30

#01 - #16

スレッドモデル 処理ごとに新規でスレッドを立ち上げるモデル

イベントループ キューにリクエストを溜めて行き、イベントループでずっと高速に処理継続

node.jsはイベントループ式

処理をブロックするやり方はNG、whileとか

一つの処理が止まると全部止まる

コールバック関数を使いノンブロッキングで作成する

npm ノードパッケージマネージャ

 

server.jsで処理を行い、hello.ejsでHTMLを表示

エスケープする場合 <%= title %>

エスケープしない場合 <%- content %>

 

node.js ってつまりは、サーバー側で使えるJavascriptってことか。

 

 

◆ TypeScript入門

TypeScript入門 (全19回) - プログラミングならドットインストール

2020/12/30 - 2020/12/30

#01 - #19

マイクロソフトが開発しているオープンソース言語

Javascriptの拡張版

ts拡張子のタイプスクリプトファイルをコンパイルすることで、jsファイルが出来る。

それをnode.jsで実行する。

 

public name: string;
constructor(name: string) {
 this.name = name;
}

上記の省略が以下

constructor(public name: string) {
}

 

アクセス修飾子

private => Class内でのみ使用可能

protected => 継承している(extendsしている)クラスでも使用可能

 

interfaceで宣言して、classにimplementsで埋め込む

interface内のプロパティをclass内で利用必須とできる

 

 

◆ Java 8入門

Java 8入門 (全43回) - プログラミングならドットインストール

2020/12/30 - 2020/12/31

#01- #43

型の宣言

String msg = "Hello World Again!";

文字列はダブルクォーテーション Hello World

文字はシングルクォーテーション a

 

コンパイル javac MyApp.java
出来るファイル MyApp.class
実行コマンド java MyApp

 

キャストする = データ型を変換すること

staticメソッド:インスタンスを生成しなくても呼び出せるメソッド
static変数:インスタンス化の影響を受けない変数

 

配列番号のこと => 添え字、インデックスと呼ぶ

配列の宣言から代入まで一気にやる方法 int sales = {100, 200, 300};

基本データ型(プリミティブ型) int , float , char 領域に対して具体的な値が入る

参照型 String , Array , Class 宣言した時点で領域には番地だけが入る

 

String型のみ基本データ型のように動く(番地の領域に、番地を入れた場合に、新たな領域を確保)

 

メソッド 

public static void sayHi(String name) {

public static String sayHi(String name) {

 

sayHi("Steve"); ← 引数

引数の数や型が違えば、同じ名前のメソッドを作ることが出来る → メソッドのオーバーロードと呼ぶ

 

Classの中にメソッド

クラスに属する変数をフィールドと呼ぶ

newすることをインスタンス化するという

コンストラクタ => クラスがインスタンス化される時に必ず呼ばれるメソッド

 

継承元のクラス => 親クラス、スーパークラス

継承したクラス => 子クラス、サブクラス

 

パッケージ化

アクセス修飾子(public , private , protected)で制限できるようになる

冒頭で宣言が必要

package com.dotinstall.myapp;

import com.dotinstall.myapp.model.User;

インポートで他のパッケージのクラスを読み込める

 

getter ゲッター getする用のメソッド

setter セッター setする用のメソッド

 

staticを付けたフィールドやメソッドは、クラスに属しているという意味でクラス変数や、クラスメソッドと呼ぶ。

 

クラスが使われる際に必ず行われるconstructorのようなもの => staticイニシャライザ

static {
 User.count = 0;
 System.out.println("Static initializer");
}

 

インスタンスイニシャライザ => インスタンス化される前に実行される

{
 System.out.println("Instance initializer");
}

 

コンストラクタ => インスタンス化された後に実行される

public User(String name) {
 this.name = name;
 User.count++;
 System.out.println("Constructor");
}

 

final修飾子 変更できない宣言

変数は定数にできる

メソッドはオーバーライドできなくなる

 

// 抽象クラス -> 具象クラス

abstract class User {
 public abstract void sayHi(); // 抽象メソッド
}

class JapaneseUser extends User {
 @Override
 public void sayHi() {
  System.out.println("こんにちは!");
 }
}

 

インターフェース

interface Printable {
 // 定数
 double VERSION = 1.2;
 // 抽象メソッド
 void print();
 // defaultメソッド
 public default void getInfo() {
  System.out.println("I/F ver. " + Printable.VERSION);
 }
}

あらかじめ、デフォルト設定のようなものを指定しておく

 

使う時はimplements 

class User implements Printable {
 @Override
 public void print() {
  System.out.println("Now printing user profile...");
 }
}

 

 

列挙型

定数として利用できる

enum Result {
 SUCCESS, // 0
 ERROR, // 1
}

 

public class MyApp {

 public static void main(String args) {
  Result res;

  res = Result.ERROR;

 

例外処理

class MyException extends Exception {
 public MyException(String s) {
  super(s);
 }
}

public class MyApp {

 public static void div(int a, int b) {
  try {
   if (b < 0) {
    throw new MyException("not minus!");
   }
   System.out.println(a / b);
  } catch (ArithmeticException e) {
   System.err.println(e.getMessage());
  } catch (MyException e) {
   System.err.println(e.getMessage());
  } finally {
   System.out.println(" -- end -- ");
  }
 }

 public static void main(String[] args) {
  div(3, 0);
  div(5, -2);
 }

}

 

ラッパークラス

必要性の意味がわからない

int じゃなくて、Integerを使う意味

格納している領域の場所を指し示していること理由っぽいけど、よくわからない

 

ジェネリクス

型を無視、どんな型でもいけるようにする

class MyData<T> {
public void getThree(T x) {

 

スレッドで並行処理が可能

 Thread t = new Thread(r);

 

// ラムダ式
// (引数) -> {処理}

 

乱数

import java.util.Random;

Random r = new Random(); クラスからインスタンス
System.out.println(r.nextDouble()); メソッドを呼び出し

System.out.println(r.nextInt(100));

 

Javaは基本は、クラスを作って、

使う時はそれを呼び出してインスタンス化して、

そのインスタンス(元はクラス)の中のメソッドを実行して処理をする

*1:$4+$5+$6+$7)/4)}' scores.dat

 int値を出力 awk 'BEGIN { print int(3.8) }' scores.dat

 文字の切り抜き awk 'BEGIN { print substr("hello", 3, 2) }' scores.dat

 

 

◆ Vue.js

Vue.js入門 (全17回) - プログラミングならドットインストール

2020/11/24 - 2020/11/24

#01 - #05

大体、どんなものか分かった。Javascriptがベースだけど、それを簡単に使えるようにしたものだな。

似てるものが多いな。この辺はより統合されて、より簡単なコードで、より便利になる気がするから、そうなってから詳しく学べば良い気もする。

 

 

シェルスクリプト

シェルスクリプト入門 (全17回) - プログラミングならドットインストール

2020/11/24 - 2020/11/24

#01 - #06

これもどんなものか分かった。大体同じだな。

 

 

◆ tmux

tmux入門 (全10回) - プログラミングならドットインストール

2020/11/24 - 2020/11/24

#01 - #10

 sudo yum -y install tmux インストール

 tmux new -s ProjectA -d セッションを作る

 Ctrl b ->d デタッチ

 tmux a -t ProjectA アタッチ

 Ctrl b -> $ リネーム

 tmux ls セッション一覧を見る

 tmux kill-session -t ProjectB セッションの切断

 tmux kill-server セッションを全削除

 Ctrl b -> , リネーム

 Ctrl b -> w ウィンドウの切り替え

 Ctrl b -> & セッション終了

 Ctrl b -> " 画面の縦分割

 Ctrl b -> % 画面の横分割

 Ctrl b -> { 画面の入れ替え

 Ctrl b -> x ペインを閉じる

 Ctrl b -> ! ペインをウィンドウとして立ち上げ

 Ctrl b -> [ バッファにコピーモード、スペースで開始、エンターまでコピー

 

 

 ◆ 詳解PHP オブジェクト編

詳解PHP オブジェクト編 (全26回) - プログラミングならドットインストール

2020/11/25 - 2020/11/26

#01 - #26

とても良かった。いままで何となく使ってたオブジェクトを体系的に理解できた。

Class、プロパティ、メソッド、インスタンス、construct、アクセス修飾子(public、private)、staticキーワード、extends、finalキーワード、抽象クラス(abstract)、インターフェース、トレイト、spl_autoload_register、namespace、例外処理

また忘れたら改めて見てみよう

 

 

◆ 詳解PHP データベース編

詳解PHP データベース編 (全19回) - プログラミングならドットインストール

2020/11/28 - 2020/11/28

#01 - #19

まぁまぁ。知っていることが多かったが、改めて確認できて良かった。

ここからは手を動かさずに動画を見るだけにしておく。

知っていることが多いので時間短縮の為。

 

 

◆ MySQL入門 基礎編

MySQL入門 基礎編 (全27回) - プログラミングならドットインストール

2020/11/28 - 2020/12/01

#01 - #27

知らないものがちょくちょくあった。日時系の関数とか。

あと、SELECT FROM WHEREなどSQL規定の単語は大文字。

自身が作成したカラム等の文字は小文字で書くのが通例らしい。

LIKEに対して%で0文字以上の任意の文字、_が任意の1文字。

SELECT文でNULLも抽出する場合、OR collumname IS NULL;

LIMIT 2, 3; 2件目から3件抽出。

 

 

MySQL入門 応用編

MySQL入門 応用編 (全37回) - プログラミングならドットインストール

2020/12/01 - 2020/12/02 -> 一時中断 -> 2020/12/21 - 2020/12/21

#01 - #37

GROUP BY した結果から抽出したい場合は、GROUP BY の後にHAVINGを使用。

IFやCASE WHEN THENで条件を付けれる。

CREATE TABLE ---- AS SELECT --- でテーブルをコピーできる。

CREATE VIEW viewname ビューの作成、元と連動する仮想的なテーブルみたいなもの。

SELECT文ふたつを UNION ALL で繋ぐことが出来る。

SELECTのカラム部分でSELECT文を使う(サブクエリ)。

大元のクエリと関連して実行するサブクエリを相関サブクエリ(where t1.column = t2.column)。

サブクエリはWHERE句やテーブル名にも使える。

サブクエリの代わりにウィンドウ関数を使うと短く記述できる。

抽出カラム名の部分に OVER (PARTITION BY カラム名) でウィンドウ関数。

ウィンドウ関数は、WINDOW xxx AS (PARTITION BY カラム名)とすることで、別名xxxも使用可能。

SQLのカラムに付ける関数に、ROW_NUMBER()、RANK()、DENSE_RANK() 等がある。

外部キー制約

FOREIGN KEY (post_id) REFERENCES posts(id)
ON DELETE CASCADE
ON UPDATE CASCADE 

SELECT文とSELECT文をくっつけるのはUNION ALL

SHOW INDEX FROM posts\G 末尾を\Gにすると改行して出力される

 

 

◆ 詳解PHP 基礎文法編

詳解PHP 基礎文法編 (全34回) - プログラミングならドットインストール

2020/12/22 - 2020/12/22

#01 - #34

continue ループをスキップ

break ループから抜ける

関数に設定した引数を仮引数、実際に呼び出す時を実引数とよぶ

関数の引数デフォルトは = で指定できる function showAd($message = 'Ad')

ローカルスコープ 関数内で使う変数

グローバルスコープ 関数外で使う変数

関数(function)を変数($x)に入れられる。無名関数、クロージャ

返り値がない場合は void

関数の型指定は ?int とすることで、null か intとすることが出来る

配列の中身みるとき // var_dump($scores); // print_r($scores);

 

配列のキー指定

$scores = [
 'first' => 90,
 'second' => 40,
 'third' => 100,
];

 

配列のキーと値を出力

foreach ($scores as $key => $score) {
 echo $key . ' - ' . $score . PHP_EOL;
}

 

配列に配列を追加

$moreScores = [
 55,
 72,
 'perfect',
 [90, 42, 88],
];

$scores = [
 90,
 40,
 ...$moreScores,
 100,
];

print_r($scores);

echo $scores[5][2] . PHP_EOL;

 

可変長引数 引数の数を可変にできる
function sum(...$numbers)
{
 // return $a + $b + $c;
 $total = 0;
 foreach ($numbers as $number) {
  $total += $number;
 }
 return $total;
}

echo sum(1, 3, 5) . PHP_EOL;
echo sum(4, 2, 5, 1) . PHP_EOL;

 

変数内の配列を分割する

list( $x , $y);

 

 

◆ 詳解PHP ビルトイン関数編

詳解PHP ビルトイン関数編 (全32回) - プログラミングならドットインストール

2020/12/22 - 2020/12/29

#01 - #32

配列から重複を取り除く array_unique([1, 1, 4, 4, 2]);

マッチした検索結果をすべて取得 preg_match_all($pattern, $input, $matches);

配列の先頭に要素を追加 array_unshift($scores, 10, 20);

配列の末尾に要素を追加 array_push($scores, 60, 70);

配列の一部を切り出し $partial = array_slice($scores, 2, 3);

配列の一部を削除 array_splice($scores, 2, 3);

配列に要素を追加・削除 array_splice($scores, 2, 0, [100, 101]);

配列のソート sort($scores);

配列のシャッフル shuffle($scores);

配列のキーをランダムに取り出す $picked = array_rand($scores, 2); echo $scores[$picked[0]] . PHP_EOL; echo $scores[$picked[1]] . PHP_EOL;

 

配列に対して一括で変更

$prices = [100, 200, 300];

$newPrices = array_map(
 // function ($n) { return $n * 1.1; },
 fn($n) => $n * 1.1,
 $prices
);

 

配列からキーの取得 $keys = array_keys($scores);

配列から値の取得 $values = array_values(($scores