Data Base 2 を作成

table1 と table2 を設定した Data Base('meibo2.db')を作成します。
SQLite が使えるか否かは、プロバイダーが許可しているか否かの問題です。

Data Base('meibo2.db') を作成するプログラムを呼び出すコードです。
<a href="http://maedakobe.rw.xsi.jp/php/dbmeibo2.php">Data Base 2 を作成</a>
次のリンクをクリックすると dbmeibo2.php が呼び出されます。
Data Base 2 を作成
table1 と table2 を結合してデータを表示します。
table を結合する
table1 と table2 のアイテムをテーブルに並べます。
アイテムをテーブルに並べる

table1 と table2 を作成

  1. 'meibo2.db' を作成して、table1, table2 に5件のデータが登録します。
    Data Base 作成の基礎は Data Base を作成 を参照して下さい。
    今回は table1 に table2 を追加して、電話番号と住所を登録します。
    <html>
    <head><title>meibo2.db の作成/印字</title></head>
    <body>
    <?php
        $flag = file_exists('meibo2.db');
        $db = new SQLite3('meibo2.db');
        if ($flag==false)
        {   // table1 を作成
            $db->exec('create table table1 (id, name, sex, age)');
            $db->exec("insert into table1 values('n1', '花子', 2, 20)");
            $db->exec("insert into table1 values('n2', '太郎', 1, 21)");
            $db->exec("insert into table1 values('n3', '涼子', 2, 22)");
            $db->exec("insert into table1 values('n4', '和也', 1, 22)");
            $db->exec("insert into table1 values('n5', '美里', 2, 22)");
            // table2 を作成
            $db->exec('create table table2(id, tel, addr)');
            $db->exec("insert into table2 values('n1', '07-123-4567', '神戸市')");
            $db->exec("insert into table2 values('n2', '06-111-1111', '大阪市')");
            $db->exec("insert into table2 values('n3', '03-456-7890', '東京都')");
            $db->exec("insert into table2 values('n4', '06-222-2222', '大阪市')");
            $db->exec("insert into table2 values('n5', '06-333-3333', '大阪市')");
        }
        //データを表示
        $results = $db->query('SELECT * FROM table1');
        while($row = $results->fetchArray())
        {   var_dump($row);
            print "<br>\r\n";
        }
        $results = $db->query('SELECT * FROM table2');
        while($row = $results->fetchArray())
        {   var_dump($row);
            print "<br>\r\n";
        }
        $db->close();
    ?>
    </body>
    </html>
    
  2. 【実行画面】
    table1 と table2 に5件のデータを登録します。
    array(8) { [0]=> string(2) "n1" ["id"]=> string(2) "n1" [1]=> string(4) "花子" ["name"]=> string(4) "花子" [2]=> int(2) ["sex"]=> int(2) [3]=> int(20) ["age"]=> int(20) } 
    array(8) { [0]=> string(2) "n2" ["id"]=> string(2) "n2" [1]=> string(4) "太郎" ["name"]=> string(4) "太郎" [2]=> int(1) ["sex"]=> int(1) [3]=> int(21) ["age"]=> int(21) } 
    array(8) { [0]=> string(2) "n3" ["id"]=> string(2) "n3" [1]=> string(4) "涼子" ["name"]=> string(4) "涼子" [2]=> int(2) ["sex"]=> int(2) [3]=> int(22) ["age"]=> int(22) } 
    array(8) { [0]=> string(2) "n4" ["id"]=> string(2) "n4" [1]=> string(4) "和也" ["name"]=> string(4) "和也" [2]=> int(1) ["sex"]=> int(1) [3]=> int(22) ["age"]=> int(22) } 
    array(8) { [0]=> string(2) "n5" ["id"]=> string(2) "n5" [1]=> string(4) "美里" ["name"]=> string(4) "美里" [2]=> int(2) ["sex"]=> int(2) [3]=> int(22) ["age"]=> int(22) } 
    array(6) { [0]=> string(2) "n1" ["id"]=> string(2) "n1" [1]=> string(11) "07-123-4567" ["tel"]=> string(11) "07-123-4567" [2]=> string(6) "神戸市" ["addr"]=> string(6) "神戸市" } 
    array(6) { [0]=> string(2) "n2" ["id"]=> string(2) "n2" [1]=> string(11) "06-111-1111" ["tel"]=> string(11) "06-111-1111" [2]=> string(6) "大阪市" ["addr"]=> string(6) "大阪市" } 
    array(6) { [0]=> string(2) "n3" ["id"]=> string(2) "n3" [1]=> string(11) "03-456-7890" ["tel"]=> string(11) "03-456-7890" [2]=> string(6) "東京都" ["addr"]=> string(6) "東京都" } 
    array(6) { [0]=> string(2) "n4" ["id"]=> string(2) "n4" [1]=> string(11) "06-222-2222" ["tel"]=> string(11) "06-222-2222" [2]=> string(6) "大阪市" ["addr"]=> string(6) "大阪市" } 
    array(6) { [0]=> string(2) "n5" ["id"]=> string(2) "n5" [1]=> string(11) "06-333-3333" ["tel"]=> string(11) "06-333-3333" [2]=> string(6) "大阪市" ["addr"]=> string(6) "大阪市" } 
    
  3. table1 の作成は Data Base を作成 を参照して下さい。
    table1 に続いて $db->exec('create table table2 (id, tel, addr)'); で table2 を作成します。
    table2 には id, tel, addr のアイテムを設定します。

テーブルを結合

  1. 'meibo2.db' の table1 と table2 を結合してデータを表示します。
    <html>
    <head><title>table を結合</title></head>
    <body>
    <?php
        $db = new SQLite3('meibo2.db');
        $results = $db->query('SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.id');
        while($row = $results->fetchArray())
        {   print_r($row);
            print "<br>\r\n";
        }
        $db->close();
    ?>
    </body>
    </html>
    
  2. 【実行画面】
    このプログラムを実行したときの画面です。
    Array ( [0] => n1 [id] => n1 [1] => 花子 [name] => 花子 [2] => 2 [sex] => 2 [3] => 20 [age] => 20 [4] => n1 [5] => 07-123-4567 [tel] => 07-123-4567 [6] => 神戸市 [addr] => 神戸市 ) 
    Array ( [0] => n2 [id] => n2 [1] => 太郎 [name] => 太郎 [2] => 1 [sex] => 1 [3] => 21 [age] => 21 [4] => n2 [5] => 06-111-1111 [tel] => 06-111-1111 [6] => 大阪市 [addr] => 大阪市 ) 
    Array ( [0] => n3 [id] => n3 [1] => 涼子 [name] => 涼子 [2] => 2 [sex] => 2 [3] => 22 [age] => 22 [4] => n3 [5] => 03-456-7890 [tel] => 03-456-7890 [6] => 東京都 [addr] => 東京都 ) 
    Array ( [0] => n4 [id] => n4 [1] => 和也 [name] => 和也 [2] => 1 [sex] => 1 [3] => 22 [age] => 22 [4] => n4 [5] => 06-222-2222 [tel] => 06-222-2222 [6] => 大阪市 [addr] => 大阪市 ) 
    Array ( [0] => n5 [id] => n5 [1] => 美里 [name] => 美里 [2] => 2 [sex] => 2 [3] => 22 [age] => 22 [4] => n5 [5] => 06-333-3333 [tel] => 06-333-3333 [6] => 大阪市 [addr] => 大阪市 ) 
    
  3. $db = new SQLite3('meibo2.db'); でデータベースを開きます。
    table1 と table2 を結合してデータを取得するコードです。
    table1.id と table2.id が一致する項目を拾い出します。
    $results = $db->query('SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.id');
  4. $results->fetchArray() 関数で $results から連想配列(数値添字配列)を順番に $row に格納します。
    fetchArray() は SQLite3 Class に属する関数です。
    print_r($row); で取得したデータ(連想配列?)を表示します。

表示項目を絞る

  1. 表示する項目を id, name, tel, addr に絞ってデータを取得します。
    <html>
    <head><title>項目を絞る</title></head>
    <body>
    <?php
        $db = new SQLite3('meibo2.db');
        $results = $db->query(
            'SELECT table1.id, table1.name, table2.tel, table2.addr FROM table1 INNER JOIN table2 ON table1.id=table2.id');
        while($row = $results->fetchArray())
        {   print_r($row);
            print "<br>\r\n";
        }
        $db->close();
    ?>
    </body>
    </html>
    
  2. 【実行画面】
    このプログラムを実行したときの画面です。
    Array ( [0] => n1 [id] => n1 [1] => 花子 [name] => 花子 [2] => 07-123-4567 [tel] => 07-123-4567 [3] => 神戸市 [addr] => 神戸市 ) 
    Array ( [0] => n2 [id] => n2 [1] => 太郎 [name] => 太郎 [2] => 06-111-1111 [tel] => 06-111-1111 [3] => 大阪市 [addr] => 大阪市 ) 
    Array ( [0] => n3 [id] => n3 [1] => 涼子 [name] => 涼子 [2] => 03-456-7890 [tel] => 03-456-7890 [3] => 東京都 [addr] => 東京都 ) 
    Array ( [0] => n4 [id] => n4 [1] => 和也 [name] => 和也 [2] => 06-222-2222 [tel] => 06-222-2222 [3] => 大阪市 [addr] => 大阪市 ) 
    Array ( [0] => n5 [id] => n5 [1] => 美里 [name] => 美里 [2] => 06-333-3333 [tel] => 06-333-3333 [3] => 大阪市 [addr] => 大阪市 ) 
    
  3. table1 と table2 を結合してデータを取得するコードです。
    table1 から id と name を table2 から tel と addr を参照します。
    table1.id と table2.id が一致する項目を拾い出します。
        $results = $db->query(
            'SELECT table1.id, table1.name, table2.tel, table2.addr FROM table1 INNER JOIN table2 ON table1.id=table2.id');
    

テーブルに並べる

  1. Data Base('meibo2.db')のアイテムをテーブルに並べます。
    <html>
    <head><title>テーブルに表示</title></head>
    <body>
    <?php
        $db = new SQLite3('meibo2.db');
        $results = $db->query('SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.id');
        print "<table border='1'>";
        print "<tr><th>ID</th><th>NAME</th><th>AGE</th><th>TEL</th><th>ADDR</th></tr>";
        while($row = $results->fetchArray())
        {   print "<tr><td>$row[id]</td>";
            print "<td>$row[name]</td>";
            print "<td>$row[age]</td>";
            print "<td>$row[tel]</td>";
            print "<td>$row[addr]</td></tr>";
        }
        print "</table>";
        $db->close();
    ?>
    </body>
    </html>
    
  2. 【実行画面】
    table1.id と table2.id が一致する項目を拾い出します。
    table1 から id, name, age を table2 から tel, addr を参照します。

前田稔の超初心者のプログラム入門
PHP Program