2007年7月31日火曜日

 

アンカータグの『href="#" onclick="..."』の記述とその他『href』の値について

アンカータグの『href="#" onclick="..."』の記述

href="#" onclick の悪習

リンク先では、以下のようなスクリプトの記述を改めるように仰っている。

<a href="#" onclick="...">検索</a>

代わりに、次のようにCSSを使って記述する事を勧めている。

<span style="cursor: pointer" onclick="...">検索</span>

A href="#"の場合・・・?

YK 2000/09/22(金) 10:56:23
~(略)~<A>のタグにonMouse**を 記述しますよね。それでそのリンク先の指定を<A href="#">としていますが この場合NC4.6だとそのページのトップ(一番上)にスクロールしてしまいます。 IE4.0の場合はその位置を維持したままなのですがNC4.**でも同じように その位置を維持しようと思うと~(略)~どのような指定をすればいいのでしょうか?

リンク先での解答は次の2つの記述方法。

href="JavaScript:void(0);"
<A HREF="http//www.yahoo.co.jp/" onClick="alert('test')" ; return false">

その他のhrefの記述について

<a href="#top">はページ上端へのアンカーではありません

本来、この記述はページ上のID要素"top"へリンクするものなので、ページ内にid="top"という記述がなければ意味は有りません。

このサンプルによりページ上端へジャンプするのはIEOpera(6で確認、7以降はジャンプしない)、Netscape4.xでした。 MozillaでもQuirksモードでのみ、これらとの互換性のためにページ上端へとジャンプするように修正されましたが、 これは本来の仕様とは異なるため、MozillaStandardモードではサポートされていません。
参考先
某日記(後期)
http://diary.imou.to/
ZSPC
http://www.zspc.com/
Web標準普及プロジェクト
http://www.mozilla.gr.jp/standards/

2007年7月29日日曜日

 

【SQL】内部結合・外部結合 - JOIN

内部結合 - INNER JOIN

二つの表(テーブル)を、あるキーとなる列(カラム)の値に注目して結合する。
例えば、二つの表で同じ識別IDを持つものを組み合わせた表を作る。

表1
番号ジャンル作家
1ミステリ東野圭吾
2ミステリ・時代小説宮部みゆき
恋愛小説江國香織
4恋愛小説辻仁成
表2
番号作家作品
1東野圭吾容疑者Xの献身
2京極夏彦姑獲鳥の夏
3宮部みゆき模倣犯
4宮部みゆきあかんべえ
5江國香織東京タワー

作家」をキーとして結合する。結合するものがないデータは抽出されない。
おそらく、表1から1行ずつ表2の全ての行をチェックしているのかと。総当り。 違ったらスイマセン。

表:内部結合結果
番号ジャンル作家番号作品
1ミステリ東野圭吾1容疑者Xの献身
2ミステリ・時代小説宮部みゆき2模倣犯
2ミステリ・時代小説宮部みゆき3あかんべえ
3恋愛小説江國香織4東京タワー
SQL文
SELECT * FROM 表1  JOIN 表2 ON 表1.作家 = 表2.作家

外部結合 - OUTER JOIN

一つの表にもう一つの表を組み込んで結合。

左外部結合
例で言うと、表1に条件を満たすキーを持つ表2のデータをくっ付ける。結合するデータがなければNULLが入る。
表:左外部結合結果
番号ジャンル作家番号作品
1ミステリ東野圭吾1容疑者Xの献身
2ミステリ・時代小説宮部みゆき2模倣犯
2ミステリ・時代小説宮部みゆき3あかんべえ
3恋愛小説江國香織4東京タワー
4恋愛小説NULLNULLNULL
SQL文
SELECT * FROM 表1 LEFT OUTER JOIN 表2 ON 表1.作家 = 表2.作家
右外部結合 - RIGHT OUTER JOIN
例で言うと、表2に条件を満たすキーを持つ表1のデータをくっ付ける。結合するデータがなければNULLが入る。
表:右外部結合結果
番号作家作品番号ジャンル
1東野圭吾容疑者Xの献身1ミステリ
2NULL姑獲鳥の夏NULLNULL
3宮部みゆき模倣犯2ミステリ・時代小説
4宮部みゆきあかんべえ2ミステリ・時代小説
5江國香織東京タワー4恋愛小説
SQL文
SELECT * FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.作家 = 表2.作家

ラベル:


2007年7月12日木曜日

 

技術者ジョーク

彼女にINSERT権限がありません

こういうセンス大好き。
専門性のある知識を別の分野で置き換えてジョークに出来る、ここまで出来て本当に理解したと言えるんだろうな。


 

【SQL】マルチテーブル・インサート(Multitable Insert)によるデータ挿入の高速化

マルチテーブル・インサート(Multitable Insert)を使うと1つのSQL文で複数の表に INSERTが可能になり、データの挿入が早くプログラム上の処理も1つにまとめる事が出来ます。
INSERT ALL
      INTO 特別顧客リスト1(番号, 名前) VALUES ('1', '佐々木')
      INTO 特別顧客リスト2(番号, 地域) VALUES ('2', '関東')
   SELECT * FROM dual;

dual は仮想テーブルを表します
以下の様に、既にあるテーブルのデータを条件を絞ったりしてコピーするのに使えます。

INSERT ALL
WHEN 年齢 <= 50 THEN
INTO 特別顧客リスト50(番号, 名前, 地域) VALUES (番号, 名前, 地域) WHEN 年齢 <= 40 THEN
INTO 特別顧客リスト40(番号, 名前, 地域) VALUES (番号, 名前, 地域) WHEN 年齢 <= 30 THEN
INTO 特別顧客リスト30(番号, 名前, 地域) VALUES (番号, 名前, 地域) SELECT 番号, 名前, 地域 FROM 顧客リスト;

各年代毎に番号と名前と地域のデータが抽出できました。

上記の様に複数のテーブルではなく、一つのテーブルに複数のデータを挿入する時、まとめて INSERT するには環境によって(DB2とmySQL)は以下でも可能です。
実行するクエリは少なくするべきです。速度に大きな違いがあると言います。

INSERT INTO 顧客リスト(番号, 名前, 地域)
             VALUES (1, '佐藤', '東北'),
                           (2, '佐々木', '北海道'),
                           (3, '鈴木', '関東');

日付関数などを使ってシステムの時間を表示するのに使います。

SELECT to_char(sysdate,'yyyy/mm/dd hh:mi:ss') "DATE/TIME" FROM dual

2002/05/24 09:53:37

他にも別の演算子と組み合わせて高度な使い方が出来るようですがここでは省略します。

SELECT
    LENGTH('オラクル') 文字数 ,
    LENGTHB('オラクル') バイト数
FROM DUAL ;

文字数  バイト数
------   ---------
     4          8

ラベル: ,


 

【SQL】WHERE 条件 OR と IN

抽出条件の論理演算子 ORIN で同等の表現が可能です。 以下のSQL文を実行すると同じ結果が得られます。

SELECT * FROM 顧客リスト WHERE 地域='北海道' OR 地域='東北'

SELECT * FROM 顧客リスト WHERE 地域 IN ('北海道', '東北')

WHERE ~ IN ~は高速だという記事を見ました。
一つ目の OR演算子を使った条件では、先の条件 '北海道' と後の条件 '東北' でテーブルを2回調べる事になるので遅くなるのではないかと思います。

ラベル: ,


2007年7月8日日曜日

 

サーバ変数一覧

$_SERVER['PHP_SELF']
現在実行しているスクリプトのファイル名。ドキュメントルートから取得。
$_SERVER['SERVER_NAME']
サーバーのホスト名。
$_SERVER['QUERY_STRING']
ページがリクエストされた時に、検索引数があればそれが格納される。
$_SERVER['HTTP_HOST']
現在のリクエストのHost。ヘッダがあればその内容。
$_SERVER['HTTP_REFERER']
現在のページの前に参照していたページのURL。ブラウザによりセットされる値であり、またブラウザによってはこの値を変更する機能を持つものもあるので注意が必要。
$_SERVER['HTTP_USER_AGENT']
現在のリクエストのUser-Agent。ヘッダがあればその内容。
例:"Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4"
$_SERVER['REMOTE_ADDR']
ページを見ている人のIPアドレス。
$_SERVER['REMOTE_HOST']
ページを見ている人のホスト名。
$_SERVER['SCRIPT_NAME']
現在のスクリプトのパス。
※スクリプト自身のページを指定するのに$_SERVER['PHP_SELF']とともに重宝
$_SERVER['REQUEST_URI']
ページにアクセスするために指定されたURI。
例:"/index.html"・"/somedir/somefile.php"など
$_SERVER['argv']
スクリプトに渡された引数を配列にしたもの。PHPがコマンドラインから実行された場合にコマンドライン引数としてアクセスする事ができる。
GETメソッドを通して呼び出された場合は検索引数が格納される。
$_SERVER['GATEWAY_INTERFACE']
サーバーが使用しているCGIのバージョン。
例:"CGI/1.1"など
$_SERVER['SERVER_SOFTWARE']
サーバーの 認識文字列、サーバソフト名。
$_SERVER['SERVER_PROTOCOL']
ページがリクエストされた時のプロトコル名とバージョン。
例:"HTTP/1.0"など
$_SERVER['REQUEST_METHOD']
ページがリクエストされた時のリクエストメソッド名。
例:'GET'・'HEAD'・'POST'・'PUT'など
$_SERVER['REQUEST_TIME']
リクエスト開始時のタイムスタンプ。PHP5.1.0以降で対応。
$_SERVER['DOCUMENT_ROOT']
現在実行されているスクリプトのドキュメントルートディレクトリ。
$_SERVER['HTTP_ACCEPT']
現在のリクエストのAccept。ヘッダがあればその内容。
$_SERVER['HTTP_ACCEPT_CHARSET']
現在のリクエストのAccept-Charset。ヘッダがあればその内容。
例:'UTF-8'
$_SERVER['HTTP_ACCEPT_ENCODING']
現在のリクエストのAccept-Encoding。ヘッダがあればその内容。
例: "gzip"
$_SERVER['HTTP_ACCEPT_LANGUAGE']
現在のリクエストのAccept-Language。ヘッダがあればその内容。
例:"ja"・"en"
$_SERVER['HTTP_CONNECTION']
現在のリクエストのConnection。ヘッダがあればその内容。
例:"keep-alive"
$_SERVER['REMOTE_PORT']
ユーザーのマシンからWebサーバへの通信に使用されているポート番号。
$_SERVER['SCRIPT_FILENAME']
現在実行されているスクリプトの絶対パス。
$_SERVER[SERVER_ADMIN'']
サーバに設定されているSERVER_ADMINの値。
$_SERVER['SERVER_PORT']
Webサーバの通信ポートとして使用されているポート番号。(通常は"80"番ポート)
$_SERVER['SERVER_SIGNATURE']
ページに追加する為にサーバ上で生成された、サーバーのバージョン名とバーチャルホスト名。
$_SERVER['PATH_TRANSLATED']
バーチャルからリアルへのマッピングがなされた後の、現在のスクリプトのファイルシステム上(ドキュメントルートではなく)でのパス。
$_SERVER['PHP_AUTH_USER']
PHPをApacheのモジュールとして実行していて、HTTP認証をしている時にそのユーザ名がセットされる。
$_SERVER['PHP_AUTH_PW']
PHPをApacheのモジュールとして実行していて、HTTP認証をしている時にそのユーザのパスワードがセットされる。
$_SERVER['AUTH_TYPE']
PHPをApacheのモジュールとして実行していて、HTTP認証をしている時にその認証形式がセットされる。
$_SERVER['argc']
PHPがコマンドライン上で実行された場合にスクリプトに渡された引数の数が渡される。

参照

PHP マニュアル
PHP: 定義済の変数 - Manual
http://www.php.net/manual/ja/reserved.variables.php#reserved.variables.server

ラベル: ,


This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google