2012年1月16日月曜日

smartyで文字列加工

修飾子

変数が空の場合のデフォルト値

{"test1"|default:"????"}

{""|default:"????"}


エスケープ

{""}

{"''"|escape}

htmlタグの削除

{"test"|strip_tags}

時間

{$smarty.now}
{$smarty.now+60*60*24|date_format:"%w"}

{$smarty.now|date_format:"%Y年%m月%d日%h時%M分%S秒"}

改行文字を変換
{$data|nl2br}
スペース
を変換


{$data|strip:""}

テンプレート内で変数を生成

{assign var="num" value="99999"}
テンプレート内の値は{$num}

smarty オブジェクトで操作

require_once('MySmarty.php');
require_once('user_bean.php');

$uses=array();
$uses[] = new user_bean(1,"test_1","2011/01/01");
$uses[] = new user_bean(2,"test_2","2010/01/01");
$uses[] = new user_bean(3,"test_3","2009/01/01");
           
$mysmarty = new MySmarty();
$mysmarty->assign('msg','hello MySmarty');
$mysmarty->assign('uses',$uses);
$mysmarty->display('index.tpl');
?>
//beanクラス
<?php
class user_bean{
    //プロパティ
    public $name;
    public $id;
    public $birth;
    //メソッド
    function __construct($id,$name,$birth){
        $this->id = $id;
        $this->name = $name;
        $this->birth = $birth;
    }
    public function getage(){
        return floor((time()-strtotime($this->birth))/(60*60*24*365));
    }
}
?>

//テンプレート
{foreach from=$uses item=use}
    <p>id {$use->id}</p>
    <p>名前 {$use->name}</p>
    <p>歳 {$use->getage()}</p>
{/foreach}

Smarty 連想配列

//プログラム
<?php
require_once('MySmarty.php');
require_once('DB.php');


$dbh = DB::connect('mysql://root:mysql@127.0.0.1/test');

$data = array(    "id"    =>    1,
                "shimei"=>array("ue"=>"yamada",
                                "shita"=>"taro")
              );               
$mysmarty = new MySmarty();
$mysmarty->assign('msg','hello MySmarty');
$mysmarty->assign('data',$data);
$mysmarty->display('index.tpl');
?>
//テンプレート
<h1>{$msg}</h1>
{$data.id}<br />
{$data.shimei.ue}<br />
{$data.shimei.shita}<br />

//表示

hello MySmarty

1
yamada
taro

Smarty DBからレコードを取り出し、テンプレート表示 テスト

mysql> insert into test_1(id,name) values(1,'test'),(2,'test2');
Query OK, 1 row affected (0.05 sec)

//レコードの確認
mysql> select * from test_1;
+------+-------+
| id   | name  |
+------+-------+
|    1 | test  |
|    2 | test2 |


//プログラム
<?php
$dbh = DB::connect('mysql://root:mysql@127.0.0.1/test');

//sql文の作成
$sql = $dbh->prepare("SELECT * FROM test_1");
$data = array();
$rs = $dbh->execute($sql);
//配列へ挿入
while($row = $rs->fetchRow(DB_FETCHMODE_ASSOC)){
    $data[]=array("id" => $row['id'],"name"    => $row['name']);
}

$mysmarty = new MySmarty();
$mysmarty->assign('msg','hello MySmarty');
$mysmarty->assign('data',$data);
$mysmarty->display('index.tpl');
?>
//テンプレート部分

<h1>{$msg}</h1>
{foreach from=$data item=datum}
    <p>{$datum.id}</p>
    <p>{$datum.name}</p>
{/foreach}



smarty 入門

/*************************************************/
/*        仕事でSmartyを使うんでおさらい     */
/************************************************/


/*-----------ダウンロード---------*/
「http://www.smarty.net/download」より「Smarty 2.6.26」をダウンロード

/*-----------インストール----------*/
「Smarty 2.6.26」を展開し「Smarty」とリネイムし、
今回は「Windows」+「Ampps」環境なので「C:\Ampps\Smarty」に配置する。

/*------------php.iniの設定----------*/
//下記を編集
include_path = ".;C:\ampps\php\includes;C:\Ampps\Smarty\lib"

/*------------ディレクトリの配置----------------------*/
/*下記のように配置します。*/
smarty_sample-
              |-test_app_1
                    |-templates     //テンプレートファイル設置
                    |-templates_c   //コンパイルしたテンプレート設置
                    |-configs       //コンフィグファイル設置
                    |-cache         //キャッシュ
                   
                   
                   
                   
/*--------------テンプレートの作成---------------------------------*/
下記のhtmlソースを「templates_c\index.tpl」に配置、

{*----   テストテンプレート   ----*}

<html>
<head>
<title>Test_1</title>
</head>
<body>

<h1>{$msg}</h1>

</body>
</html>

/*--------------プログラムの作成---------------------------------*/

/*下記を「C:\Ampps\www\smarty_sample\test_app_1」に配置*/
<?php

{*require_once('C:/Ampps/Smarty/libs/Smarty.class.php');*}
require_once('marty.class.php');

$smarty = new Smarty();

$smarty->template_dir = 'C:\Ampps\smarty_sample\test_app_1/templates/';
$smarty->compile_dir  = 'C:\Ampps\smarty_sample\test_app_1/templates_c/';
$smarty->config_dir   = 'C:\Ampps\smarty_sample\test_app_1/configs/';
$smarty->cache_dir    = 'C:\Ampps\smarty_sample\test_app_1/cache/';

$smarty->assign('msg','Hello World!');
$smarty->display('index.tpl');

?>

2012年1月11日水曜日

phpとmysqlでテーブルの存在確認

<?php
    $host = "localhost";
    $user   = "root";
    $pass = "mysql";
    $db = "test";
 $con = mysql_connect($host,$user,$pass) or die("db接続NG");
 print "db接続OK";
//テーブルチェック関数の呼出
    if(table_exists($db,'item',$con)){
     print "item table hit";
    }else{
     print "item table none";
    }
 mysql_close();


// テーブルの存在チェック関数の定義  start
 function table_exists($db_name,$tbl_name,$db)
 {
  // テーブルリストの取得
  $rs = mysql_query("SHOW TABLES FROM $db_name");
  while($arr_row = mysql_fetch_row($rs)){
    if(in_array($tbl_name,$arr_row)){
      return true;
    }
  }
  return false;
 }
// テーブルの存在チェック関数の定義  end
?>

MYSQL 入門4

-------------------ストアード-----------------
DELIMITER //
CREATE PROCEDURE TEST_1()
BEGIN
SELECT * FROM C1;
END
//
DELIMITER ;

CALL TEST_1;--ストアドの呼出
+----+---------------------+------------------+
| ID | NAME | HOYA_CATEGORY_ID |
+----+---------------------+------------------+
| 1 | BOOK | NULL |
| 2 | Fashion | NULL |
| 3 | electronics | NULL |
| 4 | Picture BOOK | 1 |
| 5 | IT BOOK | 1 |
| 6 | COOKING BOOK | 1 |
| 7 | TV electronics | 3 |
| 8 | Music electronics | 3 |
| 9 | Cooking electronics | 3 |
| 10 | Man Fashion | 2 |
| 11 | WOMAN Fashion | 2 |
| 12 | TEST | 100 |
+----+---------------------+------------------+

------------引数ありのストアド----------------
DELIMITER //
CREATE PROCEDURE TEST_2(OUT o_1 INT)
BEGIN
SELECT COUNT(*) INTO o_1 FROM C1;
END
//


mysql> CALL TEST_2(@i)--ストアドの呼出
-> //
Query OK, 1 row affected (0.00 sec)

mysql> SELECT @i--戻りのOUTを表示
-> //
+------+
| @i |
+------+
| 12 |
+------+

---------ストアードファンクション------------

DELIMITER //
CREATE FUNCTION tEST9()
RETURNS DOUBLE
BEGIN
DECLARE r DOUBLE;
SELECT AVG(ID) INTO r FROM C1;
RETURN r;
END
//

------------ストレージエンジン---------------
/*MyISAM(マイアイサム)  もっともよく利用される高速エンジン  トランザクションは利用できない*/

/*InnoDB(イノディービー) トランザクションに対応*/

/*ストレージエンジンの確認*/
| tb1 | CREATE TABLE `tb1` (
`id` int(11) DEFAULT NULL,
`name` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

/*レコードの確認*/
mysql> select * from tb1;
+------+-------+
| id | name |
+------+-------+
| 1 | test1 |
+------+-------+
1 row in set (0.00 sec)

/*トランザクションのスタート*/
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from tb1;
Query OK, 1 row affected (0.00 sec)

mysql> select * from tb1;
Empty set (0.00 sec)

/*ロールバック*/
mysql> rollback;
Query OK, 0 rows affected (0.05 sec)

/*レコード確認*/
mysql> select * from tb1;
+------+-------+
| id | name |
+------+-------+
| 1 | test1 |
+------+-------+

/*--------------ファイルの取り扱い--------------------*/
CREATE TABLE address_zip (
jis varchar(10) NULL,
zip_old varchar(5) NULL,
zip varchar(7) NULL,
addr1_kana varchar(100) NULL,
addr2_kana varchar(100) NULL,
addr3_kana varchar(100) NULL,
addr1 varchar(100) NULL,
addr2 varchar(100) NULL,
addr3 varchar(100) NULL,
c1 int NULL,
c2 int NULL,
c3 int NULL,
c4 int NULL,
c5 int NULL,
c6 int NULL
);


LOAD DATA LOCAL INFILE 'C:/ken_all/KEN_ALL.CSV'
INTO TABLE `address_zip`
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"';


SELECT * INTO OUTFILE 'C:/DATA.CSV'
FIELDS TERMINATED BY ','
FROM ADDRESS_ZIP;

/*--------------バッチファイル--------------------*/
/*下記test.batで保存し実行するとdataファイルが作成されます*/
mysql test -uroot -pmysql -e "SELECT * INTO OUTFILE 'C:/DATA2.CSV' FIELDS TERMINATED BY ',' FROM ADDRESS_ZIP;"

/*--------------リダイレクト処理--------------------*/
/*下記はc直下にlog.txtファイルに実行結果を出力します*/
tee C:/log.txt /*出力開始*/
SELECT * FROM ADDRESS_ZIP LIMIT 5;
notee /*出力終了*/

/*-----------------------------------------------------------*/
/*          バックアップ              */
/*-----------------------------------------------------------*/

mysqldump -uroot -pmysql test>C:/back_up.txt;







2012年1月6日金曜日

MYSQL 入門3

-------------LEFT JOIN--------------
mysql> SELECT * FROM USER;
+----+----------+------+---------+---------+
| ID | NAME     | Unit | KOZUKAI | BIKOU   |
+----+----------+------+---------+---------+
|  1 | ASO      |    1 |   10000 | SUKUNAI |
|  2 | KATO     |    4 |   90000 | OUI     |
|  3 | YAMADA   |    2 |   10000 | SUKUNAI |
|  4 | SUZUKI   |    1 |   10000 | SUKUNAI |
|  5 | MIYAMOTO |    3 |   50000 | FUTUU   |
|  6 | TANAKA   |    4 |   90000 | OUI     |
+----+----------+------+---------+---------+


mysql> SELECT * FROM UNIT;
+----+----------+
| ID | NAME     |
+----+----------+
|  1 | SOUMU    |
|  2 | EIGYO    |
|  3 | JIMU     |
|  4 | GIJYUTSU |
+----+----------+
---UNITテーブルのIDにないレコードを追加----
UPDATE USER SET UNIT = '7' WHERE ID = 6;


/*----LEFT JOINでは左のテーブルのレコードは全て表示されます。----*/
mysql> SELECT *
    ->   FROM USER
    -> LEFT JOIN UNIT
    ->   ON USER.UNIT = UNIT.ID ;
+----+----------+------+---------+---------+------+----------+
| ID | NAME     | Unit | KOZUKAI | BIKOU   | ID   | NAME     |
+----+----------+------+---------+---------+------+----------+
|  1 | ASO      |    1 |   10000 | SUKUNAI |    1 | SOUMU    |
|  2 | KATO     |    4 |   90000 | OUI     |    4 | GIJYUTSU |
|  3 | YAMADA   |    2 |   10000 | SUKUNAI |    2 | EIGYO    |
|  4 | SUZUKI   |    1 |   10000 | SUKUNAI |    1 | SOUMU    |
|  5 | MIYAMOTO |    3 |   50000 | FUTUU   |    3 | JIMU     |
|  6 | TANAKA   |    7 |   90000 | OUI     | NULL | NULL     |
+----+----------+------+---------+---------+------+----------+

/*----LEFT RIGHTでは右のテーブルのレコードは全て表示されます。USER.UNIT = UNIT.IDが一致しない
レコードは表示されません----*/
mysql>  SELECT *
    ->    FROM USER
    ->  RIGHT JOIN UNIT
    ->    ON USER.UNIT = UNIT.ID ;
+------+----------+------+---------+---------+----+----------+
| ID   | NAME     | Unit | KOZUKAI | BIKOU   | ID | NAME     |
+------+----------+------+---------+---------+----+----------+
|    1 | ASO      |    1 |   10000 | SUKUNAI |  1 | SOUMU    |
|    4 | SUZUKI   |    1 |   10000 | SUKUNAI |  1 | SOUMU    |
|    3 | YAMADA   |    2 |   10000 | SUKUNAI |  2 | EIGYO    |
|    5 | MIYAMOTO |    3 |   50000 | FUTUU   |  3 | JIMU     |
|    2 | KATO     |    4 |   90000 | OUI     |  4 | GIJYUTSU |
+------+----------+------+---------+---------+----+----------+


-------------------------自己結合----------------------------
/*---カテゴリテーブルの作成---*/
CREATE TABLE Category (ID INT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(100),HOYA_CATEGORY_ID INT);

INSERT INTO CATEGORY(NAME,HOYA_CATEGORY_ID) VALUES('BOOK',NULL),('Fashion',NULL),('electronics',NULL);--親カテゴリ
INSERT INTO CATEGORY(NAME,HOYA_CATEGORY_ID) VALUES('Picture BOOK',1),('IT BOOK',1),('COOKING BOOK',1);--子カテゴリ
INSERT INTO CATEGORY(NAME,HOYA_CATEGORY_ID) VALUES('Man Fashion',2),('WOMAN Fashion',2);--子カテゴリ
INSERT INTO CATEGORY(NAME,HOYA_CATEGORY_ID) VALUES('TV electronics',3),('Music electronics',3),('Cooking electronics',3);--子カテゴリ


mysql> SELECT * FROM CATEGORY;
+----+---------------------+------------------+
| ID | NAME                | HOYA_CATEGORY_ID |
+----+---------------------+------------------+
|  1 | BOOK                |             NULL |
|  2 | Fashion             |             NULL |
|  3 | electronics         |             NULL |
|  4 | Picture BOOK        |                1 |
|  5 | IT BOOK             |                1 |
|  6 | COOKING BOOK        |                1 |
|  7 | TV electronics      |                3 |
|  8 | Music electronics   |                3 |
|  9 | Cooking electronics |                3 |
| 10 | Man Fashion         |                2 |
| 11 | WOMAN Fashion       |                2 |
+----+---------------------+------------------+
--------自己結合によるカテゴリーの表示----------
mysql> SELECT *
    ->   FROM CATEGORY
    -> AS C_1
    ->   JOIN CATEGORY
    -> AS C_2
    -> WHERE C_1.ID = C_2.HOYA_CATEGORY_ID;
+----+-------------+------------------+----+---------------------+------------------+
| ID | NAME        | HOYA_CATEGORY_ID | ID | NAME                | HOYA_CATEGORY_ID |
+----+-------------+------------------+----+---------------------+------------------+
|  1 | BOOK        |             NULL |  4 | Picture BOOK        |                1 |
|  1 | BOOK        |             NULL |  5 | IT BOOK             |                1 |
|  1 | BOOK        |             NULL |  6 | COOKING BOOK        |                1 |
|  3 | electronics |             NULL |  7 | TV electronics      |                3 |
|  3 | electronics |             NULL |  8 | Music electronics   |                3 |
|  3 | electronics |             NULL |  9 | Cooking electronics |                3 |
|  2 | Fashion     |             NULL | 10 | Man Fashion         |                2 |
|  2 | Fashion     |             NULL | 11 | WOMAN Fashion       |                2 |
+----+-------------+------------------+----+---------------------+------------------+


---------------------------------サブクエリー------------------------------
/*サブクエリで最大IDを取得*/
mysql> SELECT * FROM CATEGORY WHERE ID IN (SELECT MAX(ID) FROM CATEGORY);
+----+---------------+------------------+
| ID | NAME          | HOYA_CATEGORY_ID |
+----+---------------+------------------+
| 11 | WOMAN Fashion |                2 |
+----+---------------+------------------+

mysql> SELECT * FROM CATEGORY WHERE ID IN (SELECT MAX(HOYA_CATEGORY_ID) FROM CATEGORY);
+----+-------------+------------------+
| ID | NAME        | HOYA_CATEGORY_ID |
+----+-------------+------------------+
|  3 | electronics |             NULL |
+----+-------------+------------------+

------------商品のカテゴリを表示-------------
CREATE TABLE PRODUCT(ID INT AUTO_INCREMENT PRIMARY KEY,NAME VARCHAR(100),CATEGORY_ID INT);

INSERT INTO PRODUCT(NAME,CATEGORY_ID) VALUES('PC_WORK',5),('IT_WORK',5),('PAN_COOK',6),('CAMERA',4);


mysql> SELECT CAT.NAME AS 'カテゴリ',PRO.NAME AS '商品名'FROM  CATEGORY AS CAT ,PRODUCT AS PRO WHERE CAT.ID = PRO.CATEGORY_ID;
+--------------+----------+
| カテゴリ          | 商品名        |
+--------------+----------+
| IT BOOK      | PC_WORK  |
| IT BOOK      | IT_WORK  |
| COOKING BOOK | PAN_COOK |
| Picture BOOK | CAMERA   |
+--------------+----------+


----------商品が無いカテゴリを表示-----------
SELECT CATEGORY.NAME
  FROM CATEGORY
WHERE  NOT EXISTS (SELECT * FROM PRODUCT WHERE PRODUCT.CATEGORY_ID = CATEGORY.ID)
AND CATEGORY.HOYA_CATEGORY_ID IS NOT NULL
;
+---------------------+
| NAME                |
+---------------------+
| TV electronics      |
| Music electronics   |
| Cooking electronics |
| Man Fashion         |
| WOMAN Fashion       |
| TEST                |
+---------------------+

----------------カテゴリの商品件数-----------------
SELECT CAT.NAME,COUNT(*)
  FROM CATEGORY AS CAT,
        PRODUCT AS PRO
 WHERE CAT.ID = PRO.CATEGORY_ID
 GROUP BY CAT.ID;

 +--------------+----------+
| NAME         | COUNT(*) |
+--------------+----------+
| Picture BOOK |        1 |
| IT BOOK      |        2 |
| COOKING BOOK |        1 |
+--------------+----------+

----------------ビュー-----------------
CREATE VIEW C1
  AS
SELECT ID,NAME
  FROM CATEGORY;
 
SELECT * FROM C1;
+----+---------------------+
| ID | NAME                |
+----+---------------------+
|  1 | BOOK                |
|  2 | Fashion             |
|  3 | electronics         |
|  4 | Picture BOOK        |
|  5 | IT BOOK             |
|  6 | COOKING BOOK        |
|  7 | TV electronics      |
|  8 | Music electronics   |
|  9 | Cooking electronics |
| 10 | Man Fashion         |
| 11 | WOMAN Fashion       |
| 12 | TEST                |
+----+---------------------+

--------自己結合したテーブルのVIEW---------
/*ポイントは同じなのカラム名にならない事*/

mysql> CREATE VIEW C2 AS
    ->   SELECT
    ->     CAT.ID,
    ->     CAT.NAME,
    ->     C1.ID AS KO_ID,
    ->     C1.NAME AS KO_NAME
    ->   FROM CATEGORY AS CAT
    ->     JOIN C1
    ->   WHERE CAT.ID = C1.HOYA_CATEGORY_ID;
Query OK, 0 rows affected (0.08 sec)

mysql> SELECT * FROM C2;
+----+-------------+-------+---------------------+
| ID | NAME        | KO_ID | KO_NAME             |
+----+-------------+-------+---------------------+
|  1 | BOOK        |     4 | Picture BOOK        |
|  1 | BOOK        |     5 | IT BOOK             |
|  1 | BOOK        |     6 | COOKING BOOK        |
|  3 | electronics |     7 | TV electronics      |
|  3 | electronics |     8 | Music electronics   |
|  3 | electronics |     9 | Cooking electronics |
|  2 | Fashion     |    10 | Man Fashion         |
|  2 | Fashion     |    11 | WOMAN Fashion       |
+----+-------------+-------+---------------------+

-------------ビュー上書き-------------
CREATE OR REPLACE VIEW C2 AS SELECT NOW();


-------------ビュのカラム構造の変更-------------
ALTER VIEW C2 AS
SELECT
  CAT.ID,
  CAT.NAME,
  C1.ID AS KO_ID,
  C1.NAME AS KO_NAME
FROM CATEGORY AS CAT
  JOIN C1
WHERE CAT.ID = C1.HOYA_CATEGORY_ID;

-------------ビュ-の削除-------------
/*VIEWがあれば削除します。*/
DROP VIEW IF EXISTS C2;

2012年1月5日木曜日

MYSQL入門 2

-------------OFFSET--------------

mysql> SELECT * FROM TEST5;
+-----+---------------------+
| ID2 | TIMES2              |
+-----+---------------------+
|   1 | 2012-01-04 17:47:38 |
|   2 | 2012-01-04 17:47:38 |
|   3 | 2012-01-04 17:47:38 |
|   4 | 2012-01-04 17:47:38 |
|   5 | 2012-01-04 18:19:34 |
|   6 | 2012-01-04 18:19:34 |
|   7 | 2012-01-04 18:19:34 |
|   8 | 2012-01-04 18:19:34 |
+-----+---------------------+

mysql> SELECT * FROM TEST5 LIMIT 4 OFFSET 2;
+-----+---------------------+
| ID2 | TIMES2              |
+-----+---------------------+
|   3 | 2012-01-04 17:47:38 |
|   4 | 2012-01-04 17:47:38 |
|   5 | 2012-01-04 18:19:34 |
|   6 | 2012-01-04 18:19:34 |
+-----+---------------------+

---------------テストデータの作成------------------

mysql> CREATE TABLE USER(ID INT AUTO_INCREMENT PRIMARY KEY,NAME VARCHAR(20),Unit INT);

mysql> INSERT INTO USER(NAME,UNIT)VALUES('ASO',1),('KATO',4),('YAMADA',2),('SUZUKI',1),('MIYAMOTO',3),('TANAKA',4);

mysql> SELECT * FROM USER;
+----+----------+------+
| ID | NAME     | Unit |
+----+----------+------+
|  1 | ASO      |    1 |
|  2 | KATO     |    4 |
|  3 | YAMADA   |    2 |
|  4 | SUZUKI   |    1 |
|  5 | MIYAMOTO |    3 |
|  6 | TANAKA   |    4 |
+----+----------+------+

CREATE TABLE UNIT(ID INT AUTO_INCREMENT PRIMARY KEY,NAME VARCHAR(20));

INSERT INTO UNIT(NAME) VALUES('SOUMU'),('EIGYO'),('JIMU'),('GIJYUTSU');

mysql> SELECT * FROM UNIT;
+----+----------+
| ID | NAME     |
+----+----------+
|  1 | SOUMU    |
|  2 | EIGYO    |
|  3 | JIMU     |
|  4 | GIJYUTSU |
+----+----------+


-----グループ分けしカウント-----
mysql> SELECT UNIT.ID,UNIT.NAME ,COUNT(USER.UNIT) AS 'BUSYO_COUNT'
FROM USER
JOIN UNIT ON  USER.UNIT = UNIT.ID
GROUP BY USER.UNIT;

+----+----------+-------------+
| ID | NAME     | BUSYO_COUNT |
+----+----------+-------------+
|  1 | SOUMU    |           2 |
|  2 | EIGYO    |           1 |
|  3 | JIMU     |           1 |
|  4 | GIJYUTSU |           2 |
+----+----------+-------------+


-----グループ分けした後の抽出-----
mysql> SELECT UNIT.ID,UNIT.NAME ,COUNT(USER.UNIT) AS 'BUSYO_COUNT'
    -> FROM USER
    -> JOIN UNIT ON  USER.UNIT = UNIT.ID
    -> GROUP BY USER.UNIT
    -> HAVING BUSYO_COUNT >= 2;
+----+----------+-------------+
| ID | NAME     | BUSYO_COUNT |
+----+----------+-------------+
|  1 | SOUMU    |           2 |
|  4 | GIJYUTSU |           2 |
+----+----------+-------------+

-----------UPDATE-----------
ALTER TABLE USER ADD KOZUKAI INT;

mysql> SELECT * FROM USER;
+----+----------+------+---------+
| ID | NAME     | Unit | KOZUKAI |
+----+----------+------+---------+
|  1 | ASO      |    1 |    NULL |
|  2 | KATO     |    4 |    NULL |
|  3 | YAMADA   |    2 |    NULL |
|  4 | SUZUKI   |    1 |    NULL |
|  5 | MIYAMOTO |    3 |    NULL |
|  6 | TANAKA   |    4 |    NULL |
+----+----------+------+---------+

UPDATE USER SET KOZUKAI = 10000;

mysql> SELECT * FROM USER;
+----+----------+------+---------+
| ID | NAME     | Unit | KOZUKAI |
+----+----------+------+---------+
|  1 | ASO      |    1 |   10000 |
|  2 | KATO     |    4 |   10000 |
|  3 | YAMADA   |    2 |   10000 |
|  4 | SUZUKI   |    1 |   10000 |
|  5 | MIYAMOTO |    3 |   10000 |
|  6 | TANAKA   |    4 |   10000 |
+----+----------+------+---------+

--------条件が一致するレコードを修正---------
UPDATE USER SET KOZUKAI = 90000 WHERE UNIT = 4;

mysql>  SELECT * FROM USER;
+----+----------+------+---------+
| ID | NAME     | Unit | KOZUKAI |
+----+----------+------+---------+
|  1 | ASO      |    1 |   10000 |
|  2 | KATO     |    4 |   90000 |
|  3 | YAMADA   |    2 |   10000 |
|  4 | SUZUKI   |    1 |   10000 |
|  5 | MIYAMOTO |    3 |   10000 |
|  6 | TANAKA   |    4 |   90000 |
+----+----------+------+---------+

UPDATE USER SET KOZUKAI = 50000 WHERE UNIT = 3;

mysql> SELECT * FROM USER;
+----+----------+------+---------+
| ID | NAME     | Unit | KOZUKAI |
+----+----------+------+---------+
|  1 | ASO      |    1 |   10000 |
|  2 | KATO     |    4 |   90000 |
|  3 | YAMADA   |    2 |   10000 |
|  4 | SUZUKI   |    1 |   10000 |
|  5 | MIYAMOTO |    3 |   50000 |
|  6 | TANAKA   |    4 |   90000 |
+----+----------+------+---------+

SELECT * FROM USER ORDER BY KOZUKAI;
+----+----------+------+---------+
| ID | NAME     | Unit | KOZUKAI |
+----+----------+------+---------+
|  1 | ASO      |    1 |   10000 |
|  3 | YAMADA   |    2 |   10000 |
|  4 | SUZUKI   |    1 |   10000 |
|  5 | MIYAMOTO |    3 |   50000 |
|  2 | KATO     |    4 |   90000 |
|  6 | TANAKA   |    4 |   90000 |
+----+----------+------+---------+

-------------CASEを使ったUPDATE文----------------
ALTER TABLE USER ADD BIKOU VARCHAR(100);
UPDATE USER
SET BIKOU =
CASE
 WHEN KOZUKAI <= 10000 THEN 'SUKUNAI'
 WHEN (10000 < KOZUKAI AND KOZUKAI < 51000) THEN 'FUTU'
 WHEN 51000 < KOZUKAI THEN 'OUI'
END;

mysql> SELECT * FROM USER ORDER BY KOZUKAI;
+----+----------+------+---------+---------+
| ID | NAME     | Unit | KOZUKAI | BIKOU   |
+----+----------+------+---------+---------+
|  1 | ASO      |    1 |   10000 | SUKUNAI |
|  3 | YAMADA   |    2 |   10000 | SUKUNAI |
|  4 | SUZUKI   |    1 |   10000 | SUKUNAI |
|  5 | MIYAMOTO |    3 |   50000 | FUTU    |
|  2 | KATO     |    4 |   90000 | OUI     |
|  6 | TANAKA   |    4 |   90000 | OUI     |
+----+----------+------+---------+---------+

2012年1月4日水曜日

MYSQL入門 1

 -------------TABLEの作成--------------
mysql> create table tb1(bang varchar(10),name varchar(10),tosi int);



-------------インサート--------------
mysql>INSERT INTO TB1 VALUES('TEST2','KAWA',11),('TEST3','TOSI',44),('TEST4','YAMA',20);

-------------テーブルのカラム構造のコピー--------------

CREATE TABLE TB1_COP LIKE TB1;

-------------テーブルのレコードのコピー--------------
INSERT INTO TB1_COP SELECT * FROM TB1;


-------------カラムデータ型を変更する--------------
mysql> ALTER TABLE tb1 mODIFY BANG varchar(200);


-------------カラムを追加--------------
mysql> ALTER TABLE tb1 ADD birthday DATETIME;


-------------主キー--------------
mysql> CREATE TABLE TB2(ID INT PRIMARY KEY, CATE VARCHAR(10));

-------------主キーオートインクリメント--------------
mysql> CREATE TABLE TB3(ID INT AUTO_INCREMENT PRIMARY KEY, CATE2 VARCHAR(10));


-------------主キーオートインクリメントにインサート--------------
mysql> INSERT INTO TB3(CATE2) VALUES('1'),('2'),('3');

-----------日付関数--------------
mysql> CREATE TABLE NOWTIME(ID INT AUTO_INCREMENT PRIMARY KEY,SHOW_TIME DATETIME);
mysql> INSERT INTO NOWTIME(SHOW_TIME) VALUES(NOW());

+----+---------------------+
| ID | SHOW_TIME           |
+----+---------------------+
|  1 | 2012-01-04 16:27:11 |
|  2 | 2012-01-04 16:27:13 |
|  3 | 2012-01-04 16:27:14 |
|  4 | 2012-01-04 16:27:15 |
|  5 | 2012-01-04 16:27:16 |
+----+---------------------+

----------リミット句--------------
mysql>SELECT * FROM NOWTIME LIMIT 3;

---------WHERE句--------------
mysql> SELECT * FROM NOWTIME WHERE ID = 3;
mysql> SELECT * FROM NOWTIME WHERE ID > 2 and id < 5


---------case when--------------
SELECT ID,
  CASE
    WHEN ID > 2 THEN '小さい'
    WHEN ID > 3 THEN 'すこし小さい'
    WHEN ID > 4 THEN '中ぐらい'
    WHEN ID > 5 THEN '大きい'
    ELSE '図れません'
  END
FROM TB3;
--------+
|  1 | 図れません

                |
|  2 | 図れません

                |
|  3 | 小さい

              |
|  4 | 小さい

              |
|  5 | 小さい

              |
|  6 | 小さい

              |
              |

---------UPDATE--------------
mysql> UPDATE 「テーブル名」  SET「カラム名」=「設定値」;
mysql> UPDATE 「テーブル名」  SET「カラム名」=「設定値」WHERE 条件;

---------複数テーブルのレコードを合わせて表示--------------
mysql> CREATE TABLE TEST4(ID1 INT AUTO_INCREMENT PRIMARY KEY, TIMES1 DATETIME);
mysql> CREATE TABLE TEST5(ID2 INT AUTO_INCREMENT PRIMARY KEY, TIMES2 DATETIME);


mysql> INSERT INTO TEST4(TIMES1) VALUES(NOW()),(NOW()),(NOW()),(NOW());
mysql> INSERT INTO TEST5(TIMES2) VALUES(NOW()),(NOW()),(NOW()),(NOW());


mysql> (SELECT ID1 FROM TEST4)
UNION
(SELECT ID2 FROM TEST5);

+-----+
| ID1 |
+-----+
|   1 |
|   2 |
|   3 |
|   4 |
+-----+
4 rows in set (0.00 sec)


mysql> (SELECT ID1 FROM TEST4)
UNION ALL
(SELECT ID2 FROM TEST5);

+-----+
| ID1 |
+-----+
|   1 |
|   2 |
|   3 |
|   4 |
|   1 |
|   2 |
|   3 |
|   4 |
+-----+
8 rows in set (0.00 sec)


---------複数テーブルを結合して表示   内部結合 JOIN と INNER JOINはキーが一致しているレコードを取り出します--------------
SELECT * FROM TEST4
JOIN TEST5
ON TEST4.ID1 = TEST5.ID2;

+-----+---------------------+-----+---------------------+
| ID1 | TIMES1              | ID2 | TIMES2              |
+-----+---------------------+-----+---------------------+
|   1 | 2012-01-04 17:47:05 |   1 | 2012-01-04 17:47:38 |
|   2 | 2012-01-04 17:47:05 |   2 | 2012-01-04 17:47:38 |
|   3 | 2012-01-04 17:47:05 |   3 | 2012-01-04 17:47:38 |
|   4 | 2012-01-04 17:47:05 |   4 | 2012-01-04 17:47:38 |
+-----+---------------------+-----+---------------------+

SELECT * FROM TEST4
JOIN TEST5 ON ID2 > 1
WHERE TEST4.ID1 = TEST5.ID2;
+-----+---------------------+-----+---------------------+
| ID1 | TIMES1              | ID2 | TIMES2              |
+-----+---------------------+-----+---------------------+
|   2 | 2012-01-04 17:47:05 |   2 | 2012-01-04 17:47:38 |
|   3 | 2012-01-04 17:47:05 |   3 | 2012-01-04 17:47:38 |
|   4 | 2012-01-04 17:47:05 |   4 | 2012-01-04 17:47:38 |
+-----+---------------------+-----+---------------------+
3 rows in set (0.00 sec)





2011年11月15日火曜日

オラクル PLSQL入門

http://www.shift-the-oracle.com/sql/create-table.html



CREATE TABLE USER_MASTER
(
   USER_ID           VARCHAR2(8) NOT NULL,
   DEPT_NO           VARCHAR2(8),
   USER_NAME         VARCHAR2(32),
   CREATED_ON        DATE DEFAULT SYSDATE,
   MODIFIED_ON       DATE
);

--■■■■■■■■■■■■■■■■■プライマリキーを作成するDDL文■■■■■■■■■■■■■■■■■

ALTER TABLE USER_MASTER ADD CONSTRAINT USER_MASTER_PK PRIMARY KEY (USER_ID) ;



--■■■■■■■■■■■■■■■■■テーブル一覧 ■■■■■■■■■■■■■■■■■

select table_name from user_tables;



--■■■■■■■■■■■■■■■■■UPDATE■■■■■■■■■■■■■■■■■
UPDATE (
     SELECT
            USER_ID, USER_NAME
     FROM USER_MASTER
) -- [ ビューの別名 ]
SET
    USER_NAME = USER_NAME || ' さま';

--■■■■■■■■■■■■■■■■■レコード削除 ■■■■■■■■■■■■■■■■■

-- USER_ID = '0020' OR  USER_ID ='0019' を削除
DELETE
  FROM USER_MASTER
 WHERE USER_ID IN ('0020', '0019');

--■■■■■■■引数ありのカーソル■■■■■■
------------------------------------------------------------------------------
--  カーソル定義
------------------------------------------------------------------------------
  CURSOR CJIDO(p_START   IN NUMBER,                --引数ありのカーソルを作成
               p_END     IN NUMBER,
               p_KIJUNBI IN NUMBER) IS
    SELECT A.KOJIN_NO,
           A.SHIMEI_KANA,
           A.SHIMEI_KANJI,
      FROM EAT_ATENAKIHON A
     WHERE A.SEINENGAPI BETWEEN p_START AND p_END
       AND A.GENZON_KBN < 3;
      
CRJIDO   CJIDO%ROWTYPE;                         --カーソルにある、全てのテーブル列型を取得、
******呼び出し元*******
FOR CRJIDO IN CJIDO(ISTART,IEND,V_KIJUNBI) LOOP    --カーソルの呼出
    DBMS_OUTPUT.PUT_LINE(CRJIDO.KOJIN_NO);                          
END LOOP;

--■■■■■■テーブルを使ったコレクション■■■■■■
    -- 取得したデータのワーク領域
    TYPE MTJIDO_TYPE IS TABLE OF EQT_SEIJINSYA%ROWTYPE INDEX BY BINARY_INTEGER;
    MJIDO_WORK MTJIDO_TYPE;
   
    MJIDO_WORK(1).「カラム名」:= 'TEST';       --文字列を代入

--■■■■■■動的SQL■■■■■■
DBMS_SQL.DEFINE_COLUMN(カーソル変数名, 位置, 変数名, サイズ);

--■■■■■■定数の宣言■■■■■■
--定数名 定数指定 データ型 初期値;
--初期値を設定しない場合はNULLになります。
NUM CONSTANT PLS_INTEGER := 10;

--■■■■■■例外処理EXCEPTION■■■■■■
BEGIN
  BEGIN
    SELECT 「カラム名」 INTO 「カラムのデータ型」 FROM 「テーブル名」WHERE 「カラム名」= 1;
  EXCEPTION
      WHEN NO_DATA_FOUND THEN                --SQLが行をもどさない場合の例外
        DBMS_OUTPUT.PUT_LINE(SQLCODE);
      WHEN OTHERS THNE
        DBMS_OUTPUT.PUT_LINE(SQLCODE);       --全ての例外を出力
  END;
END;


--■■■■■■ユーザ定義例外処理EXCEPTION■■■■■■
BEGIN
  IS
    uSER_eXCEPTION EXCEPTION;  --ユーザ定義例外を宣言
  BEGIN
    SELECT 「カラム名」 INTO 「カラムのデータ型」 FROM 「テーブル名」WHERE 「カラム名」= 1;
    RAISE  uSER_eXCEPTION;    --ユーザ定義例外の呼出
  EXCEPTION
      WHEN uSER_eXCEPTION THEN
        DBMS_OUTPUT.PUT_LINE('ユーザ定義例外の呼出です');
  END;
END;

--■■■■■FOR UPDATE句■■■■■■
BEGIN
  IS
    CURSOR c_1 IS
        SELECT 「カラム名」
        INTO 「カラムのデータ型」
        FROM 「テーブル名」
        WHERE 「カラム名」> 100
        FOR UPDATE NOWAIT;    --ロックが解放されるのを待たずに、プログラムにもどり、例外が発生します。
  BEGIN
    OPEN c_1
       FOR r_1 IN c_1 LOOP;
               UPDATE(SELECT  r_1.「カラム名」FORM 「テーブル名」) SET 「カラム名」= 'レコード';
               COMMIT;
       END LOOP;
  EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('ロックが掛かっているか、行がありません');
  END;
END;
--■■■■■プロシジャーの作成■■■■■■
CREATE OR REPLACE PROCEDURE proc_1(
  i1 IN PLS_INTEGER;  --引数
  i2 IN PLS_INTEGER;
) RETURN PLS_INTEGER IS

  USER_i_1 PLS_INTEGER;  --フィールド変数
  USER_i_2 PLS_INTEGER;
BEGIN
  実行部;
  RETURN 0;
END;

2011年11月11日金曜日

サッサと PHP5のクラス定義解説

クラス定義
<?php
class Hoge{
}
?>
new Hoge();

コンストラクタ
<?php

include 'Debug_Show.php';


class Hoge{
    function Hoge(){
        print "コンストラクタです";
    }

}

new Hoge();

クラスメソッド
<?php

class Hoge{
    static function calc($str){
        print $str;
    }
}
Hoge::calc("クラスメソッド");
クラス変数
<?php

Class Hoge {
    static $str = "クラス変数";

}

print Hoge::$str;


メンバー変数
<?php

Class Hoge {
 public $a = "メンバー変数";
}

$hoge = new Hoge();
echo $hoge->a;

メソッド

<?php

Class Hoge {
    function calc(){
        print 1+1;
        print "メソッド";
    }
}

$hoge = new Hoge();
echo $hoge->calc();


クラス定数
<?php

Class Hoge {
    const STR = "クラス定数";

}

print Hoge::STR;

thisとは?そのクラスをさします
<?php

Class Hoge {
    var $a= "thisです";
    function calc($a){
        print $a;
        print "<br />";
        print $this->a;
    }
}

$hoge = new Hoge();
$hoge->calc("thisではない");

#thisではない
#thisです

オブジェクトのコピー
<?php

Class Hoge {
    var $a= "thisです。";
}

$hoge = new Hoge();
$obj = $hoge;
print $obj->a;
print $hoge->a;

$obj->a = "てすと。";

print $obj->a;
print $hoge->a;

$b = $obj->a;
$b = "ffff。";

print $obj->a;
print $hoge->a;


#thisです。thisです。てすと。てすと。てすと。てすと。

継承 親子関係
<?php

Class Oy {
    var $a= "Oyです。";

    function getA(){
        print $this->a;
    }
}

Class Ko extends Oy{

}

$ko =  new Ko();
print  get_Class($ko);
$ko->getA();
print $ko->a;


#KoOyです。Oyです。

Androidアプリ開発 CVSファイルとDBへの書き込み

/********************アクティビティクラス*************************/
package kawasaki.com;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

import android.app.Activity;
import android.content.ContentValues;
import android.content.res.AssetManager;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;

public class Db_Test_1 extends Activity {
    /** Called when the activity is first created. */
    //メンバー変数
    //データベースヘルパーの作成

    private DatabaseHelper helper;

    //データベースの宣言
    public static SQLiteDatabase mDb;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //DBファイルの真偽
        File file = new File("/data/data/kawasaki.com/databases/sample.db");
        if(file.exists()){
            file.delete();
            Log.d("kawasaki_debug","ファイルを消去しました");
        }else{
            Log.d("kawasaki_debug","ファイルはありません");
        }

        //DBの作成
        helper  = new DatabaseHelper(this);

        //CSVファイルの読み込み準備
        AssetManager as = getResources().getAssets();
        //DBオープン
        mDb = helper.getWritableDatabase();
        //DB値格納変数
        ContentValues value = new ContentValues();
        try {

            BufferedReader bf = new BufferedReader(new InputStreamReader(as.open("test_csv.csv")));
            String s;
            while((s = bf.readLine()) != null){
                String [] strAry = s.split(",");
                Log.d("kawasaki_debug","" + strAry[0] + "");
                value.put("NAME",strAry[0]);
                value.put("TEL",strAry[1]);
                mDb.insert("BOOK",null,value);
            }
        } catch (IOException e) {
            // TODO 自動生成された catch ブロック
            Log.d("kawasaki_debug", "" + e + "");
        }
    }

    //DBクローズ
    @Override
    public void onDestroy(){
        super.onDestroy();
        helper.close();
    }
}

/**********************DatabaseHelperクラス**********************/

import java.io.File;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper{

    //コンテキスト
    public DatabaseHelper(Context context){
        super(context,"sample.db",null,1);
        //super(context, null, null, 1);
        System.out.println("DBです");
    }

    //テープル作成
    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO 自動生成されたメソッド・スタブ
        db.execSQL("CREATE TABLE BOOK (_id INTEGER PRIMARY KEY,NAME TEXT,TEL TEXT)");


    }

    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO 自動生成されたメソッド・スタブ
    }
}
★★★★★★★★★★★★★まとめ★★★★★★★★★★★★★★
AndroidでもDB基本的なところはかわりません、
SQLiteOpenHelperなど便利なクラスもありますので積極的に使うべきですね、

2011年11月1日火曜日

android開発 サイト

開発環境参考サイト
http://codezine.jp/article/detail/5943


eclipseのサイトURL

    • File Password: 0Rfkkk3
    ①androidSDKのtoolにパスを通す。
    ②eclipseにアンドロイドのフラグインを取り込む、使用可能なソフトウエアで「android」で検索、
余裕があればhttp://codezine.jp/article/detail/5957で電卓アプリなど作ってみようかな?

2011年10月31日月曜日

php ファイルアップロード

<html>
<head><title>uploader.html</title></head>
<body>
<form method="post" enctype="multipart/form-data" action="up_load.php">
  <input type="file" name="upfile">
  <input type="submit" value="アップロードする">
</form>
</body>
</html>

<?php
  $updir = "c:test_up/";
  $filename = $_FILES['upfile']['name'];
  if(move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename)==FALSE){
    print("Upload failed");
    print($_FILES['upfile']['error']);
  }
  else {
    print("<b> $filename </b> uploaded");
  }
?>

phpでカレンダー


<form action="calen.php" method="get">
    <select name="year">
        <option value="2011">2011</option>
        <option value="2012">2012</option>
        <option value="2013">2013</option>
        <option value="2014">2014</option>
    </select>
    <select name="month">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
        <option value="10">10</option>
        <option value="11">11</option>
        <option value="12">12</option>
    </select>
    <input type="submit">
</form>



<?php
class Calen{
    function Calen(){
        if($_GET){
            $this->select_year = $_GET["year"];
            $this->select_month = $_GET["month"];
        }else{
            $this->select_year = date("Y");//年
            $this->select_month = date("n");//月
        }
    }
    function show_calender(){

        $max_day = date("t",mktime(0,0,0,$this->select_month,1,$this->select_year));//最大日

        print "$this->select_year"."年"."$this->select_month"."月";
        print "<table border=\"1\">";
        for($day = 1; $day <= $max_day; $day++){
            $day_color = date("w",mktime(0,0,0,$this->select_month,$day,$this->select_year));//曜日にナンバーを取得
            if($day_color == 0 || $day == 1){    //1日か0ならtrタグ開始
                print "<tr>";
            }
           
            if($day == 1){
                $i = 0;
                $day_color = (int)$day_color;
                while($day_color > 0){
                    print "<td> </td>";
                    $day_color--;
                }
            }
            print "<td>".$day."</td>";
            if($day_color == 6){                //6ならtrタグ終了
                print "</tr>";
            }
        }
        print "</table>";

        //////////
    }
}

$calender = new Calen();
$calender->show_calender();



?>

2011年10月28日金曜日

現場でperlをやってみて思ったこと、

現場でperlをやってみて思ったこと、

①まず、引数の受け取りが違っていた、「$_」「$_[0]」「@_」
②言語の文法が柔軟でした、
③特殊変数の使い方にとまどいました、
④引数の渡し方は普通でした、
⑤ローカル変数の宣言  my($i,@j)
⑥perlとは違うがmysqlで「SELECT DATE_ADD」は勉強になった、「SELECT date_add(current_date, interval 3 day);」など超楽できた。
⑦関数の戻り値のうけとりで、($a,$b)=関数($c$d)、普通だった、

⑧「map・join」関数はよくつかっていたし、あわせて「$_」もで、正直は????だった、
書式は「join(','map {$_b} list)」こんなのです。


※今の課題を解決する方法として
①しっかりとしたリファレンスを読む、


②他人に書いたコードを読む、


③自分で動かし、デバックで確認する

④知らない関数はググルり、書式として残す、アウトプットは大切だし記憶に残ることがよくわかった

やるしかないのだ!!