記入日:2022-12-16 編集日:2022-12-16
SQL見るだけクエリ。今回は2つのテーブルをLEFT JOINという方法で結合してみます。
この記事を読むと(約3分)
データベース内のあるテーブルと別のテーブルを結合する際に、どのようなプログラムを書いているかが分かります。
以下の様な2種類のテーブルを用意しました。
テーブル名:sample_note
id | tittle | date | member_id | line | status |
---|---|---|---|---|---|
1 | AAAAA | 2022-12-26 | 1 | 50 | 1 |
2 | BBBBB | 2022-12-27 | 2 | 50 | 1 |
3 | CCCCC | 2022-12-28 | 3 | 50 | 1 |
4 | DDDDD | 2022-12-29 | 50 | 0 | |
5 | EEEEE | 2022-12-30 | 1 | 50 | 1 |
テーブル名:sample_member
id | name | line | status |
---|---|---|---|
1 | 一ノ瀬 | 50 | 1 |
2 | 二宮 | 50 | 1 |
3 | 三小田 | 50 | 1 |
4 | 志村 | 50 | 0 |
5 | 後藤 | 50 | 1 |
テーブルの情報を取得するSQLに関して、注目する部分は、以下の9~11行目のみです。
SELECT a.id,a.tittle,a.member_id,b.name FROM sample_note AS a LEFT JOIN sample_member AS b ON a.member_id = b.id この部分で、データベース内にあるsample_noteという名前のテーブルとsample_memberという名前のテーブルを結合しながらレコード(保存された内容)を取得しております。
try { include_once '../model/class.php'; // データベース接続 $database = new Database(); $db = $database->connect(); // SQLを準備し、パラメータをバインドする $query = 'SELECT a.id,a.tittle,a.member_id,b.name FROM sample_note AS a LEFT JOIN sample_member AS b ON a.member_id = b.id'; $stmt = $db->prepare($query); // 実行する $stmt->execute(); // 結果を取得する $result = $stmt->fetchAll(PDO::FETCH_ASSOC); print_r($result); // データベースから切断する $database->disconnect(); } catch(PDOException $e) { echo $e->getMessage(); }
これを実行すると、二次元連想配列という形式で、結合された情報を取得することができます。
Array ( [0] => Array ( [id] => 1 [tittle] => AAAAA [member_id] => 1 [name] => 一ノ瀬 ) [1] => Array ( [id] => 2 [tittle] => BBBBB [member_id] => 2 [name] => 二宮 ) [2] => Array ( [id] => 3 [tittle] => CCCCC [member_id] => 3 [name] => 三小田 ) [3] => Array ( [id] => 4 [tittle] => DDDDD [member_id] => [name] => ) [4] => Array ( [id] => 5 [tittle] => EEEEE [member_id] => 1 [name] => 一ノ瀬 ) )
見やすくする為に、HTMLとCSSで体裁を整えると、以下のようになります。
id | tittle | member_id | name |
---|---|---|---|
1 | AAAAA |
1 |
一ノ瀬 |
2 | BBBBB |
2 |
二宮 |
3 | CCCCC |
3 |
三小田 |
4 | DDDDD |
||
5 | EEEEE |
1 |
一ノ瀬 |
id=4のDDDDDの行はnameが空欄のままです。これは、そもそもmember_idの欄が空欄だった為、連結する為のキーが存在しませんでした、LEFT JOINでは、その場合、行としては生成しますが、連結するものは何もなく、空欄のまま表示される事になります。
結合する前までは、sample_noteテーブルには、メンバーの表記は数字でしか保存されていませんでしたが、この数字をキーにして、sample_memberテーブルのnameを連結する事によって、名前の表記も載った表を作成する事が可能になりました。このようなテーブル間のリレーションはシステム内でとても頻繁に登場します。
SQLの使いどころ
サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。
SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。
また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。
KK
機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。