jQueryでselect要素の特定のoptionを隠したい!

菱田直哉
select要素の特定のoptionを隠すにはどうしたらいいか調べた。

方法は2つあります。

  1. 特定option要素をremoveしたり、appendしたりする
  2. タグでラップしてしまう

ちなみに、hide();する(cssに{display: none;}を追加する)はNGです。

cssではIEが非表示にならないから!というのが発見でした。

菱田直哉
では早速。

まずはHTMLのsampleです。jQueryを読み込む方法は、GoogleCDNより読み込みます。

モリー
jquery-sample_001.html

<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8″>
<title>jQuery test</title>
<!– <script type=”text/javascript” src=”https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js”></script> –>
<script
src=”https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js”></script>
<script src=”../js/jquery-sample_001.js”></script>
</head>
<body>
 <select id=”select1″>
  <option value=”1″>1番目</option>
<option value=”2″>2番目</option>
<option value=”3″>3番目</option>
 </select>
 <button id=”btn-hide”>隠す</button>
<button id=”btn-back”>戻す</button>
</body>
</html>

モリー
jquery-sample_001.js


// jQueryでselect要素の特定のoptionを隠したい!
$(function(){
 $(‘#btn-hide’).on(‘click’,function(){
$(‘select#select1 option[value=”1″]’).wrap(‘<span>’);});

$(‘#btn-back’).on(‘click’,function(){
$(‘select#select1 option[value=”1″]’).unwrap(‘<span>’);

});
});


菱田直哉
あ、隠れたね。

jQueryをGoogleのCDNから読み込む方法

菱田直哉
jQueryはダウンロードしなくても、使えます!

Google : https://developers.google.com/speed/libraries/#jquery

モリー
バージョンも選べますのでリンクから確認してね。

jQuery

3.x snippet:
<script src=”https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js”></script>
2.x snippet:
<script src=”https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js”></script>
1.x snippet:
<script src=”https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js”></script>

jQuery UI

<link rel=”stylesheet” href=”https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css”>
<script src=”https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js”></script>

SQLで特定の情報のみを検索する方法 Where句

データベース検索中。。。

菱田直哉
う~ん。

モリー
なにを悩んでいるの?

菱田直哉
テーブルの全検索は覚えたんだけど、レコードが多すぎて見つからないんだ。

モリー
そんな時は、欲しい情報のキーを意識するといいよ。

菱田直哉
キー?

モリー
例えば、従業員だったら社員番号とか、一意になるものとかが良いね。

菱田直哉
なるほど、じゃあ、例えば社員1000人の会社で、社員番号500番の情報を知りたい場合はどうするの?

菱田直哉
全部検索すると500行目を見るしかないもんね。。。

モリー
そういう時は、Where句(ウェア句)を使うんだよ。

菱田直哉
Where句?

モリー
まず、全部検索する方法は覚えているよね?

菱田直哉
うん。

Select * from T_EMP;

モリー
そう。社員テーブルから全部のカラムを呼び出しているね。

モリー
そこにどんな情報を書けばいいと思う?

菱田直哉
社員番号が500番のレコードだけってことかな。

モリー
そう。それがWhere句。社員番号がNUMだとすると、こうなるよ。

Select * from T_EMP Where NUM = 500;

菱田直哉
Whereで条件を指定するってことだね!

モリー
わかってきたね。これで悩まなくて済むかな?

菱田直哉
今のところは大丈夫!ありがとう!

条件を指定するのは Where です。
500以上は  NUM >= 500
500より上は NUM > 500
500だけは  NUM = 500
500以下は  NUM <= 500
500より下は NUM < 500

文字列なんかはシングルクオーテーションをつけて
NUM = ‘500’
としましょう。

菱田直哉
ちょっとSQLを使うなら、充分な知識だね!

DB2 テーブルをロックせずにSELECTする方法 with ur;

菱田直哉
DB2でSELECTするとき、「with ur」を必ずつけろって言われたんだけどなんで?

モリー
それは、コミット前のものも確認してねってことじゃない?

菱田直哉
なんか、ロックがどうのこうのって言ってたよ。何も付けないSELECT文じゃダメなの?

モリー
ダメなときと大丈夫なときがあるね。

インデックスがあるなしでのロックが変わる

SELECT *
FROM TABLE
WHERE EMPNO = ‘000310’;

単純な Where文でも検索対象の対象の列にIndexが張ってあるかないかで
ロック対象が全く異なる。

インデックスがあればオプティマイザはインデックスキャンを選び行ロック(row-level locking == IS)を行う。
インデックスがなければ表全体を検索しなければならず、このときは表ロック(table level lock == S)がかかる。
参考:デッドロックの公式見解

菱田直哉
普通の検索だと、行ロックか表ロックのどちらかがかかっちゃうんだ!

モリー
そう。だからただ検索するためには、「with ur」は有効だね。

モリー
でも、他のトランザクションがコミット前の更新も見えちゃうよ?いいの?
菱田直哉
どういうこと?
モリー
例えば、わたしが間違ったデータを追加して、ロールバックする予定なんだけど、そっちで検索したら見えちゃうってこと。
菱田直哉
それは困るね。間違ったデータは見たくないな。ちゃんとデータベースにコミットされているものだけ見たい。
モリー
それならこうだね。

結果表が読み取り専用であることを明示するには、「SELECT … FOR READ ONLY(またはFETCH ONLY)」を使用します。

菱田直哉
じゃあ「with ur」って何者?

DB2では、UR(Uncommitted Read:非コミット読み取り)、CS(Cursor Stability:カーソル固定)、RS(Read Stability:読み取り固定)、RR(Repeatable Read:反復可能読み取り)がサポートされています。例えば「SELECT * FROM STAFF WITH UR」とすると、非コミット読み取り(最小限のロック)を使用してSELECTが実行されます。
DB2チューニング・ベストプラクティス

菱田直哉
ロックをかけないって目的と、最小限ロックでコミット前の状態も取得できるものは違うんだね。

結論:DB2 テーブルをロックせずにSELECTする方法
select * from TABLE_NAME for read only;

菱田直哉
次からはread onlyを使おっと。

SQL SELECT文でDBのテーブルにある値を全検索する方法

データベースに接続中・・・。

菱田直哉
SQLって何だっけ?

モリー
簡単に言うと、データベースを操作するための言葉だね。

菱田直哉
言葉?

モリー
そう。データベースに、「この情報表示して」って伝える為の手法だよ。

菱田直哉
なるほどね。

菱田直哉
じゃあ、このテーブル全部表示して!ってこともできるの?

モリー
一番簡単なSQLだね。テーブルの名前は何?

菱田直哉
T_SECRETだよ。

モリー
「表示して」って言葉は「SELECT」

菱田直哉
全部は?

モリー
全部はカラム全部って意味だよね?だったら「*(アスタリスク)」だよ。

モリー
どこのテーブルかは「FROM」で指定してね。

全てのカラム、全てのデータを取得するには

select * from T_SECRET;

菱田直哉
つまり、「表示して」「全部のカラムを」「このテーブル」ってことだね。

モリー
そう。他にも、「ここだけを」っていうのもあるけどね。今回は全部っていうからそれでOK。

モリー
会話には区切りが必要だから、最後に「;」セミコロンを入れてね。

菱田直哉
はーい。

検索中。。。。

菱田直哉
本当だ、ちゃんと全部取れた。
モリー
T_SECRETには何が入っているの?
菱田直哉
それは秘密です!

必ず覚えておこう。

select (カラム名) from (テーブル名);

菱田直哉
まさか歴代の犬、良い子ランキングなんて言えないよね。