記入日:2023-02-07 編集日:2023-02-07
SQL見るだけクエリ。今回は、MYSQL UNION句で複数のSELECT文の結果を一つのテーブル的に扱う際に、 複数のテーブルを結合する場合や、GROUP BYで最小値を取得するなど、条件を加える場合を考えてみようと思います。
今回は
複数の販売テーブルから、商品毎に、最低価格で販売した価格を取得するSQLを書いてみようと思います。
以下の様な5つのテーブルがあるとします。
1つ名は、商品毎のサイズが記録されたテーブル(table0)
その他4つは、商品の販売データが記録されたテーブル (table1,table2,table3,table4)です。
table0 id | item | size | status -- | ---- | ---- | ------ 1 | AAAA | A1 | 1 2 | BBBB | A2 | 1 3 | CCCC | A3 | 1 4 | DDDD | A4 | 1 table1 id | item | price | status -- | ---- | ----- | ------ 1 | AAAA | 20000 | 1 2 | BBBB | 17000 | 1 table2 id | item | price | status -- | ---- | ----- | ------ 1 | CCCC | 22000 | 0 2 | DDDD | 18000 | 1 table3 id | item | price | status -- | ---- | ----- | ------ 1 | EEEE | 20000 | 1 2 | BBBB | 12000 | 1 table4 id | item | price | status -- | ---- | ----- | ------ 1 | CCCC | 18000 | 1 2 | EEEE | 11000 | 1
テーブル (table1,table2,table3,table4)で、各々statusが1のみ結合し、
itemの名称が同じもの同士をGROUP化、その際に値段の一番低いものを取得、
上記をtable0と結合し、最低価格をtabele0の各カラムと共に取得する。
// DB接続 $dsn = 'mysql:dbname=データベース名;host=localhost'; $user = 'ユーザー名'; $password = 'パスワード'; try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo '接続できませんでした。理由:'.$e->getMessage(); } // SQL文 $sql = "SELECT c.* b.min_price FROM table0 AS c LEFT JOIN (SELECT item, MIN(a.price) AS min_price FROM"; $sql .= " (SELECT * FROM table1 WHERE status = 1"; $sql .= " UNION SELECT * FROM table2 WHERE status = 1"; $sql .= " UNION SELECT * FROM table3 WHERE status = 1"; $sql .= " UNION SELECT * FROM table4 WHERE status = 1"; $sql .= " ) AS a GROUP BY a.item) AS b"; $sql .= " ON c.item = b.item WHERE c.status = 1"; // 実行 $stmt = $dbh->query($sql); // 結果を取得する $results = $stmt->fetchAll(PDO::FETCH_ASSOC; // 接続を閉じる $dbh = null;
SQLの使いどころ
サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。
SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。
また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。
KK
機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。